機械学習 はじめよう

第9回 線形回帰[後編]

この記事を読むのに必要な時間:およそ 3.5 分

線形回帰の例

直線で表せない例として前回登場した,次のデータを使って,実際に線形回帰を解いてみましょう。

(x,t)=(0.0,4.0),(2.0,0.0),(3.9,3.0),(4.0,2.0)

画像

このxとtの関係を,多項式基底の線形回帰で求めます。基底関数には φ0=1, φ1=x, φ2=x2 の3個の多項式を使いましょう。求めたい f(x) はその基底関数の線形和として表わされます。

画像

w0, w1, w2 を適切に決めるのがここの目的です。この f(x) と点列を使って,誤差関数を求めましょう。誤差関数には先ほど紹介した二乗誤差を用います。

画像

後はこの式を平方完成すればいいのですが,項数が多すぎてちょっと計算が大変です。そこで,誤差関数が最小となる wi では偏微分が0になることを使って注2⁠,最小値を与える wi を求めることにしましょう。

画像

同様に,

画像

画像

この連立方程式を解けば,w0=3.98, w1=-3.58, w2=0.80 が求まります。

ここでは原理を見てもらうためにわざわざ泥臭い計算に落としていますが,実際には行列を使ってもっと機械的に計算ができる方法があります。そのあたりは次回の実践編で紹介されると思います。

求めた wi を使って,f(x) のグラフを描いてみましょう。

画像

画像

このとおり,だいぶそれっぽい線が描けました。

注2
「偏微分が0」は最小値を与える必要条件でしかありません。厳密には二次形式が正定値であることを示す必要があります。

過学習(over-fitting)

先ほどの例では,多項式基底の個数を3個(つまり2次式)にしましたが,これは自由に選ぶことができます。

一般に基底関数の個数が多いほどモデルとしての表現力,つまり記述できる関数の幅は広がりますので,計算が大変でない範囲でできるだけ基底を増やせばいい気がしますが,残念ながら話はそう単純ではありません。

試しに先ほどの例題にて,基底関数を1個増やして1, x, x2, x3 の4個で解いてみましょう。

画像

画像

誤差関数の偏微分は w0 ~ w3 のそれぞれで行うため,4元の連立方程式が得られます。

画像

画像

画像

画像

これを解くと,w0=4.00, w1=-16.91, w2=10.81, w3=-1.68 が求まりました。グラフを描いてみましょう。

画像

画像

どうでしょう,⁠それっぽい」と言えそうですか? もちろん「そうそう,こういう答えが欲しかったんだ」という人がいないと断言はできませんが,やはり通常はこのような極端な答えは望ましくないでしょう。

関数がこのようになってしまうこと,より一般には「データに適合しすぎてしまうこと」により「都合の悪い答え」(都合いい悪いも仮定)が出てくることを「過学習(over-fitting⁠⁠」と呼びます。

著者プロフィール

中谷秀洋(なかたにしゅうよう)

サイボウズ・ラボ(株)にてWebアプリ連携や自然言語処理を中心に研究開発を行いながら,英単語タイピングゲーム iVocaをサービス提供している。

URLhttp://d.hatena.ne.jp/n_shuyo/
Twitterhttp://twitter.com/shuyo