要件定義の不安をなくす。要件定義の不安をなくす。ユニファのバックエンド分割に学ぶイノベーションメタバース開発に必要な技術の基本知識をおさらい。Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。11:00ツイート本連載は「これから機械学習に取り組みたい」「ディープラーニングや機械学習を使った経験がある」といったエンジニアに向けて、データ量が少なくても分析が実現できる「スパースモデリング」という手法を紹介します。前回はスパースモデリングの代表的な手法であるLASSOについて解説をしてきました。今回は、辞書学習と呼ばれる手法を紹介し、画像処理への応用について解説します。\|x\|_1\)を最小化するような\(x\)を見つける問題でした。x\)に対して、観測値\(y\)は説明変数のうち少ないものの組み合わせで表現できるはずだという仮定に基づいています。今回紹介する辞書学習は、観測値が与えられたとき、これらの観測値は辞書と呼ばれる典型的なパターンが少数組み合わさることで表現できるはずだという仮定に基づいています。DX\)となるように、典型的なパターンを意味する辞書の行列\(D\)と、辞書の少数の組み合わせ方を示すスパースコードの行列\(X\)に分解を行います。learnに実装されている方法や、\(L_0\)正則化を使って求めるMODアルゴリズムやK-SVDアルゴリズムなどがあります。ここでは、シンプルで強力なK-SVDアルゴリズムを使ってみましょう。learnなどには実装がないため、筆者がコミッタをつとめるオープンソースのスパースモデリング用のライブラリであるspm-imageを使うことにします。200の行列\(Y\)を作って、それにK-SVDアルゴリズムを適用してみましょう。XD\)と扱われることに注意してください。\(Y\)は200次元の観測値を縦に100個並べたものと解釈します。200の辞書の行列\(D\)が得られます。ksvd.components_得られたスパースコードの行列\(X\)と辞書の行列\(D\)を可視化した様子です。\(D\)の各行を辞書といい、これが、観測値\(Y\)を構成するための少数のパターンを表しています。\(X\)はほとんどの値が0の疎な行列となっており、\(X\)の\(i\)行目は、\(Y\)の\(i\)行目の観測値を表現するための辞書の組み合わせ方を示しています。スパースコードと辞書しかし、残念ながら、今回の観測値\(Y\)はランダムな行列であるため有益な辞書は得られていないようです。XD\)を計算してみると、その誤差が大きいことからわかります。X.dot(D)))0.12821788379791452が得られ、これは無視できない大きさであることがわかります。辞書学習では、観測値は辞書と呼ばれる典型的なパターンが少数組み合わさることで表現できるはずだという仮定に基づいていますが、そもそもこの仮定に当てはまっていないものに対しては意味のある結果を得ることができません。いうときに使えばいいのでしょうか。その一つとして、画像データへの応用があります。リュウジ)中学生の頃からプログラミングに興味を持ち、鈴鹿高専で情報学の基礎を学び、その後京都大学に編入し、より高度な数学を学ぶ。大学の実験で仲良くなった大関先生の紹介でハカルスでアルバイトを始める。3年間のアルバイトの後、2019年4月にハカルス初の新卒として入社。3.12」の最初のベータ版がリリース新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。