COURSERAで学ぶ機械学習(3週目-3)

Bicepper

こんにちは!Bicepperです。

前回のCOURSERAの「Andrew Ng先生の機械学習」6回目からの続きです。

6回目はこちらからどうぞ!

1回目はこちら

多クラス分類(One vs All)

今回から、多クラス分類の話です。
多クラス分類では、どんな課題が考えられるでしょうか?

例えばメールの振り分けですね。メールへの自動タグ付けと考えてもいいでしょう。「仕事、家族、友人、趣味」など色々考えられます。
あるいは、病気の診断というのはどうでしょう。「問題なし、風邪、インフルエンザ」に分けることが出来るのではないでしょうか。
もっと身近であれば、天気も考えられます。「晴れ、曇り、雨、雪」など。

これまでは、このような2値分類を見てきました。

多クラス分類はこのようになります。

どのようにアルゴリズムを適用させればいいでしょうか?

我々はポジティブとネガティブに分ける方法は知っていますが、この方法は使えません。
そこで、「one vs all」という方法を用いいます。
この場合で言えば、2択問題を3つ作り出すことです。すなわち、強制的に2択にしてしまうということですね。

試しにクラス1(三角形)をネガティブにした場合を見てみます。

クラス2(丸)とクラス3(バツ)を共通の印である四角形にしてしまえば、2値分類になりますから、決定境界を引くことができますね。
これと同じことを2回繰り返します。

3つのパターンを上からそれぞれ、\(h^{(1)}_θ(x)\)、\(h^{(2)}_θ(x)\)、\(h^{(3)}_θ(x)\)、とした時、次にように表現できます。

$$\large h^{(i)}_θ(x)=P(y=i|x;θ)$$

今回は3パターンですから、\((i=1,2,3)\)になります。
例えば最初のパターンではクラス1をネガティブとして扱っていますから、\(y=1)\)になる確率を、2つ目のパターンではクラス2をネガティブとして扱っていますから、\(y=2)\)になる確率を求めているということになります。

オーバーフィッティング

これまで様々なアルゴリズムを見て来ました。
ところが、いざアルゴリズムを適用してみると上手く機能しないことがあります。最初にやった家の販売の例を見てみましょう。

1番目は、赤いバツ印を見ていると、家の広さが広くなるにつれて、価格は一定の線を超えるとある程度横ばいになっているのが読み取れます。しかし、このグラフの仮説では直線になっており、あまり上手くフィットしているとは言えません。これをアンダーフィッティング、または高バイアスと言います。

2番目は、二次関数の場合は非常に上手くフィットしてると言えるでしょう。

3番目は、四次多項式を見てみますと一見フィットしているように見えますが、何だかとてもウネウネしています。これはトレーニングセットに関してはとても上手くフィットしていますが、いざ一般化と言う点ではあまり良いとは言えません。これをオーバーフィッティング、または高分散と言います。これは高次の多項式を当てはめた場合に起こりうる現象です。

すなわち、オーバーフィッティングというのは、トレーニングセットに対してフィットさせてしまっており、新規の予測に対しては失敗する、というものです。

今度はロジスティック回帰で見てみましょう。

\(g\)はシグモイド関数です。

1番目は、先ほどと同様、単なる直線による分類です。上手く分類できているようには見えません。アンダーフィッティングですね。

2番目は、二次項の場合です。これはかなり上手くフィットできているように見えますね。

3番目は、高次元の場合です。トレーニングデータにフィットさせようとし過ぎて、かなり歪んだ決定境界になっています。オーバーフィッティングです。

さて、オーバーフィッティングが起こる原因や、判定方法は別の機会にするとしまして、オーバーフィッティングに対してどのように対処するべきかを考えます。

これまで見て来た例は、多くても四次多項式でした。そのため、自分たちでグラフに落とし込み、「視覚的」にオーバーフィッティングの成否を判定しています。しかし、実際のデータでは特徴量はもっと膨大であり、とてもグラフに落とし込む方法は現実的ではありません。
今問題になっているのは、「高次元になるとオーバーフィッティングする可能性がある」ということです。

対処方法は次の2つの選択肢があります。

1.特徴量を減らす

  • 特徴量の取捨選択を手動でやる
  • モデル選択アルゴリズム

2.正規化

  • 全ての特徴量を保持する代わりに、パラメータ\(θ_j\)の値を小さくする
  • それぞれの特徴量が少しずつyの予測に役立つ

特徴量の選択は、時には上手く働き、オーバーフィッティングを解消することがあります。
しかし、自ら情報を捨てるというデメリットもあります。仮に、全ての特徴量が有用なものだった場合、取捨選択は難しいですし、そもそも有用な情報は捨て難いです。

正規化では、全ての特徴量は保持し、取捨選択はしません。その代わり、パラメータ\(θ_j\)の値を小さくします。実際にこの方法は、後ほど見る例で上手く働きます。大雑把に言えば、「全ての特徴量がyの予測に少しずつ貢献する」ということです。全ての特徴量が有用で、捨てたくない場合に有効です。

正規化のコスト関数

正規化をもう少し掘り下げて見ていきましょう。
こちらに、前回使ったグラフの一部があります。②が適切にフィットしたグラフであり、③がオーバーフィッティングしたグラフでしたね。

正規化の手法で、「パラメータ\(θ_j\)の値を小さくする」というのを学びました。
今回は\(θ_3\)と\(θ_4\)にペナルティを与えて、\(θ\)を小さくしてみます。こちらが線形回帰の最小化のコスト関数です。

$$\large \underset{θ}{min}\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2$$

これに少し手を加えて、以下のように変形します。

$$\large \underset{θ}{min}\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2+1000θ^{2}_3+1000θ^{2}_4$$

1000倍の\(θ^{2}_3\)と\(θ^{2}_4\)をそれぞれ加えました。1000倍というのは適当です。

さて、今1000倍もの値が加わろうとしている訳ですから、当然\(θ^{2}_3\)と\(θ^{2}_4\)をかなり小さな値にしなくてはなりません。でないと、コスト関数自体がとても巨大になってしまいます。

そこで、\(θ^{2}_3\)と\(θ^{2}_4\)を限りなく0に近づけてしまい、\(θ^{2}_3\)と\(θ^{2}_4\)を無いに等しいことにしてしまいます。
そうすると、残る\(θ\)から作られる関数は二次関数ですから、よりフィットする方向に修正されるのではないか、ということです。

これを一般化すると、パラメータ\(θ_0\),\(θ_1\),…,\(θ_n\)があるので、

  • 仮説がより単純化できる
  • 仮説の単純化により、オーバーフィットしにくくなる

ということになります。

具体的に見てみましょう。いつも通り、家の販売を例にします。

  • 特徴量:\(x_1\),\(x_2\),…,\(x_{100}\)
  • パラメータ:\(θ_0\),\(θ_1\),\(θ_2\),…,\(θ_{100}\)

特徴量は例えば広さ、回数、築年数などですね。これが100個ある設定です。
この段階で、どの特徴量が有用なのかは判定できませんし、選び出すことは非常に難しいです。
例では\(θ_3\)と\(θ_4\)にペナルティを与えましたが、これも視覚的に見ているだけです。

そこで、先ほど線形回帰の最小化のコスト関数を変形させましたが、これを一般化します。

$$\large J(θ)=\frac{1}{2m}\biggl[\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2+\lambda\sum_{i=1}^m θ^{2}_j\biggl]$$

\(\lambda\)から始まる式が追加されましたが、これを正規化パラメータと呼びます。

上記の一般化された式では、2つのゴールが設定されています。
1つ目は前半の「トレーニングデータに対してうまくフィットさせる」ということ、そして2つ目は後半の「\(θ\)の値を小さく保つ」ということです。

この2つのゴールのトレードオフを制御しているのが、\(\lambda\)です。「トレーニングデータにフィットさせたい、けどオーバーフィッティングは避けたい」という要望のバランスを取っている訳ですね。
もし\(\lambda\)に入る値がかなり大きくなると、ペナルティはかなり重くなり、各\(θ\)は限りなく0に近付くことになります。
これは、\(θ_0\)しか残らないことになり、単なる直線になります。すなわちアンダーフィッティングということであり、バイアスの掛け過ぎを意味しますね。

線形回帰の正規化

線形回帰を正規化します。
多変量線形回帰の最急降下法を覚えていますか?こんな式でした。

$$\large θ_j:=θ_j-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_j$$

前回も説明しましたが、\(θ_0\)は特殊であり、ペナルティを与えません。
そこで\(θ_0\)だけを抜き出して、別の式にしてしまいます。

$$\large θ_0:=θ_0-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_0$$
$$\large θ_j:=θ_j-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_j$$

\(θ_0\)を別けましたので、元々の式を正規化します。

$$\large θ_0:=θ_0-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_0$$
$$\large θ_j:=θ_j-α\biggl[\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_j+\frac{\lambda}{m}θ_j \biggl]$$

正規化した式をよく見ると、\(θ_j\)に関してまとめられそうです。
まとめるとこんな感じになります。

$$\large θ_j:=θ_j(1-α\frac{\lambda}{m})-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_j$$

まとめることによって出てきた\((1-α\frac{\lambda}{m})\)は、非常に面白い効果を発揮します。
通常、\((1-α\frac{\lambda}{m})\)は1より小さいため、\((1-α\frac{\lambda}{m}) < 1\)が成り立ちます。そしてここの値は、1より少しだけ小さい値、例えば0.99などになります。 この時点で、\(θ_j\times0.99\)ですから、ほんの少しだけ0に近付くことになります。 後半の数式は、元々あった最急降下法と変わりません。

ロジスティック回帰の正規化

実は、ロジスティック回帰の正規化は、先ほどやった線形回帰の正規化と見た目は何も変わりません。

$$\large θ_0:=θ_0-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_0$$
$$\large θ_j:=θ_j-α\biggl[\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)})-y^{(i)})x^{(i)}_j+\frac{\lambda}{m}θ_j \biggl]$$

では、線形とロジスティックは同じ…..いえいえ、前にもこんなやりとりがありましたね。
そうです、「仮説」が違います

$$\large h_θ(x)=\frac{1}{1+e^{-θ^{T}x}}$$

ですから、見た目は同じでも、出てくる結果は全く違います。