編集部からのお知らせ
動画セミナー「Security Trend Winter」公開中!
最新記事まとめ「医療IT」
スモールデータから知見を見出す「スパースモデリング」

スパースモデリングの実践--データから本質を抜き出す - (page 2)

大関真之

2016-01-20 07:00

 最小二乗法では、ズレが最小となるような直線を特徴づけるパラメータ、傾きや切片の組み合わせを見つければよい。その原理は実に簡単だ。自分で画面に向かってボールペンを当てて直線をあてはめようとしたときの感覚を大事にしてほしい。ボールペンを当てながら傾けたり、上下左右に動かすと、傾きはズレてゆき、戻しては再びズレてしまい、段々と落ち着いてくるのではないだろうか。それをイメージ化したものが図2である。

 縦軸に「見た目のズレ」、横軸に「パラメータの値」を載せたグラフである。ちょうどボールペンを動かすというのがパラメータを変化させるということだ。そうするとズレが変化していく。当然データ点に直線を合わせるのだから、見た目のズレが減少する方向にパラメータを動かすはずだ。それを模式的に示したものが図に示す玉の動きである。調子良くペンを動かしてしまうと、行き過ぎてしまい、最良の推定結果を通り越して、ズレが大きくなる。そして引き返すようにペンを動かしただろう。


最良の直線を探す思考の様子(図二)

 これが人間の頭の中で行われていることといってもそんなに異論を述べる人はいないだろう。そして微調整しながら、段々と最良の推定結果に落ち着く。ズレを下げようとしては通り過ぎて、を繰り返しながら。つまりズレが下がるように谷底へところころ落ちる球をシミュレーションすれば、機械にやらせても同じように推定してくれるはずだ。

 この落ちる球の動きをシミュレーションする計算方法として、「勾配法」がある。ちょうど名前の通り、勾配=坂道に従うままにパラメータを動かすというわけだ。この坂道の傾き具合を計算するには、微分を用いるが、数学が苦手でもプログラムに任せれば良いのだ。急な傾きであれば、一気に駆け下りればよい。緩やかな坂ではゆったりと降りる。その考えから以下のように勾配法のプログラムは構成されている。

【勾配法】

 (パラメータの新しい候補値)=(その古い値)-(指定されたパラメータでの微分値)×(更新幅)

 見た目のズレを表したグラフの傾きの値に応じて、降りる間隔を大きくするためにかけ算を用いている。傾きが大きければ大きい程、新しい候補値は大きく変化させるためだ。ただしある程度、更新幅を調整することでじりじりと動かないと(グラフの)谷底から勢いよく飛び出してしまう値が出ることがあるので注意したい。

 勾配法など、この手の解析をするときによく利用される数値計算ソフトウェア「Matlab」でのコードの様子を図3に挙げる。もちろん同様のコードはMatlabと比較的互換性のあるプログラミング言語「Octave」や「Python」、よく知られたC言語やFortranなど科学技術計算に用いられる言語などでも書ける。


図3:Matlabでのコードの様子

 実際に筆者が 勾配法で図1の数値を計算したところ、a=2.2366、b=4.8361という推定結果が得られた。実を言うと、XとYのデータは、この記事のためにa=2.2、b=5として、ノイズを乗せて人工的に生成したものである。たった5点の実験結果から推定したにしては、中々良好な推定結果といえるだろう。

 さて上記の例では、「人の目で」見当をつけて、直線の関係があるだろうと思い、その直線を当てはめて、どんな傾きが良いか、どんな切片が良いかを探り、最適なものを選択してきた。でもこれは都合がよくないか。

 われわれが相手にするのは素性の分からないデータであり、単なる数字の羅列である。それを都度、グラフを描いて、直線を当てはめるのは非現実的だ。そしてそもそもそれは直線に合わせるべきかどうかはわからない。世の中にはもっと複雑な形をしたグラフが存在する。

ZDNet Japan 記事を毎朝メールでまとめ読み(登録無料)

特集

CIO

モバイル

セキュリティ

スペシャル

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNet Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]