Coursera MachineLearning 3週目 まとめ

MachineLearning

機械学習界隈で評判高いCourseraのMachineLearningを受講したので、講義内容を個人的にまとめてみたいと思います。
3週目はロジスティック回帰(logistic regression)と正則化(Regularization)についてです。

ロジスティック回帰 (logistic regression)

1、2週目で学んできた回帰分析では、いくつかの特徴を利用して目的値の予測を行いました。
3週目では分類(classification)について考えていきます。

例として、腫瘍を良性か悪性のどちらかに分類する問題を挙げてみましょう。
このような場合の分類問題では、y = 0(良性腫瘍)か y = 1(悪性腫瘍)のどちらかを示すようなアルゴリズムを作成する必要があります。

まずは、既に知っている回帰分析のアルゴリズムで考えてみます。
回帰分析を行う際に作成した仮定関数は以下のよなものでした。

それでは分類問題に適用してみましょう。

(出典:Andrew Ng, Coursera Machine Learning Week 2)

特徴(feature)は「大きさ」のみとし、サンプルデータ数が8個(m = 8)の場合で考えます。
この例だと、0.5あたりを基準値と設定すれば、仮定関数が基準値より大きい値を示した「大きさ」をもつ腫瘍は悪性であると分類できそうに思えます。

しかし、以下のようにデータ数が増えたとしたらどうでしょうか。

仮定関数が少しずれてしまいました。
先ほどと同様に分類しようとすると、幾つかの悪性腫瘍を良性腫瘍だとアルゴリズムが誤認しそうですね。

また、回帰分析での仮定関数がアウトプットする予測値は、1よりも大きく、もしくは0よりも小さくなり得ます。
しかし今回のケースでは、良性腫瘍と悪性腫瘍の判断できれば良いので、仮定関数は(\(0 < h_θ (x) < 1\))の範囲内の値を示せば十分です。

色々考えると、不必要な値を表す可能性がある回帰分析のアルゴリズムはあまり適していなさそうですね。
それでは、どのような分類アルゴリズムを作れば良いのでしょうか?

ここで、ロジスティック関数(シグモイド関数)が登場します。

式で表すと以下の通りです。

ロジスティック関数は、0からゆっくりと増加ししていき、1へと近づいていきます。この関数を使えば範囲を限定できそうですね。今回は、このロジスティック関数を使用して分類問題を解いていきます。

回帰分析の時と同じように、仮定関数 (Hypothesis function)、目的関数 (Cost function)、最急降下法 (Gradient Descent)を見ていきましょう。

仮定関数 (Hypothesis function)

今回の仮定関数は、特徴xとパラメーターθが与えられた時に、y = 1 となる確率を推計します。(確率なので、仮定関数がアウトプットする値の範囲は(\(0 < h_θ (x) < 1\))になります)

シグモイド関数を使用した仮定関数は、以下のようになります。

0.5を基準として、そこより大きければ y = 1 、小さければ y = 0 と予測・分類する仮説関数を作成します。
(z >> 0 の時は y = 1 により近づき、 z << 0 の時は y = 0 により近づきます)

\(θ^T x = θ_0 x_0 + θ_1 x_1 + θ_2 x_2 + θ_3 x_3 + … + θ_n x_n\)なので、回帰分析の時に使用したような仮定関数をロジスティック関数のzに代入したものが、ロジスティック回帰での仮定関数になります。

回帰分析の時と同様にパラメーターθが定まれば、良性腫瘍と悪性腫瘍を見分ける仮定関数を得ることができますね。
最適なθを求めるために、目的関数を定義しましょう。

目的関数 (Cost function)

回帰分析での目的関数は以下のように示すことができました。

各データの誤差の平均値を求める式で、この関数を最小にするようなθを求めたいのでした。
ロジスティック回帰でもそのゴールは変わりませんが、ここではロジスティック関数用に式を変形してあげる必要があります。

y = 1 or 0  で場合分けをしています。
分類問題を扱うロジスティック回帰では、以下のように場合分けをして考える必要があります。

(i) y = 1(悪性腫瘍) を予測したい場合 … y = 1 を示す時に、z >> 0 で目的関数Jが最小になる。
(y = 0を示す時は、z << 0 で最大(∞)になる)

(ii) y = 0 (良性腫瘍) を予測したい場合 … y = 0 を示す時に、z << 0 で目的関数Jが最小になる。  (y = 1を示す時は、z >> 0 で最大(∞)になる)

正しく分類できている時に目的関数が最小になれば良い。ということですね。
回帰分析のように連続したデータを扱うわけではないので、少し工夫してあげる必要があります。

この2パターンを1つの式にまとめると以下のようになります。

Σの中に2つの項がありますが y は 0 か 1 しかとらないので、実際に計算する際にはどちらかの項は消えることになります。
これで目的関数を得ることができました。

最急降下法 (Gradient Descent)

ロジスティック回帰でも最急降下法を行います。

目的関数J と学習率α を用いて、θの値が収束するまでアップデートし続けます。
ここで行なっていることは回帰分析と同じですね。

以上を計算することで、悪性腫瘍と良性腫瘍を分類するモデルを作成することができます。
仮定関数をロジスティック関数にして、取りうる値を0から1の間に制限している点がロジスティック回帰の特徴です。

one vs all

上記の腫瘍の例では、y = 0 or 1 のような、2択の分類(binary classification)について考えました。
それでは、y = 0, 1, 2, 3 のように複数に分類したい場合はどうすれば良いのでしょうか。

複数の分類を行う際には、「one vs all」と呼ばれるアルゴリズムを使用します。
y = 0, 1, 2 の分類を行いたい場合は以下のようなイメージで行います。

(出典:Andrew Ng, Coursera Machine Learning Week 2)

各カテゴリーのひとつひとつに注目し、「あるカテゴリー」対「それ以外のカテゴリー」の2択の分類を行います。
分類したいカテゴリーの数だけロジスティック回帰モデルを作成し、フィッティングさせています。

それぞれのロジスティック回帰モデルは、与えられた特徴 xとθに対して、y = i となる条件付き確率を推計します。
(今回の例では i=0, 1, 2 のカテゴリーに対して、それぞれモデルを作成し確率を推定しています)

新たなインプットを分類したい場合は、これら複数のロジスティック回帰モデルで分類を行なってみて、一番確率が高くなるカテゴリー i に分類すれば良い。というわけです。

結局のところ「one vs all」でも、行うことはbinary classificationと同じですね。

オーバーフィッティング (over fitting)

これまでに線形回帰やロジスティック回帰について学んできました。
家の価格や腫瘍の分類などの例を考えてきましたが、どちらも直線モデルでの予測や分類でした。

それぞれの回帰分析では、説明変数の次数を増やしてn次多項式とすることで仮定関数を曲線とし、より集めてきたデータセットにフィットさせることができます。

図で示すと、それぞれ以下のようになります。

(出典:Andrew Ng, Coursera Machine Learning Week 2)

どちらも直線よりも曲線の方がうまくフィットしそうです。
そうなると…高次の変数をもっと増やして、よりデータセットにフィットさせたら良いのでは!?
となりそうですが、やり過ぎてしまうと問題が発生します。

(出典:Andrew Ng, Coursera Machine Learning Week 2)

先ほどよりも更にデータセットにフィットしていますね。集めてきたデータセットに対してはかなり精度良く予測・分類を行うことができそうです。
しかし、新規データの予測・分類となるとどうでしょうか?

黄色塗りの◯で示した新規データは誤って分類されてしまいます。
このように、既存のデータセットに対してフィットし過ぎている現象を、オーバーフィッティング (over fitting) と呼びます。

それでは、オーバーフィッティングにならず、精度の高いモデルを作成するためにはどうしたら良いのでしょうか?

正則化 (Regularization)

オーバーフィッティングを防ぎ、より汎用性の高いモデルを作成する方法として「正則化 (Regularization)」があります。

線形回帰でもロジスティック回帰でも、パラメーターθを設定してモデルを最適化してきました。

先ほどオーバーフィッティングしていた仮定関数です。
オーバーフィッティングの原因が高次変数の増加によるものなのであれば、それら変数の仮定関数への影響を小さくしてあげれば良いのでは?
ということで「正則化」では、各項の係数にあたるθの値が小さくなるように制御します。θが大きくなりすぎないように負荷をかけるイメージですね。
目的関数に、パラメーターθに負荷を与える「正則化パラメーター λ 」を導入します。

λ が含まれる第2項の増加は、目的関数の増大に直結します。目的関数が最小値をとるようにするためにも、各θを小さくせざるを得ない状態にしているというわけです。
また、二つ目の合計演算子Σの範囲が ( j = 1, …, n ) となっています。特徴量に影響しないインデックスが0のθは、正則化では考える必要がないので、計算からは除外しています。

目的関数の次に、最急降下法についても見てみましょう。

インデックス0のθと、それ以外のθで場合分けをしています。
( j = 1, …, n ) のθにのみλで負荷をかけながら、これまで通りアップデートを行います。

《注意点》
λを大きくしすぎると…
パラメーターθが限りなく0に近づくため、仮定関数はほぼ直線のモデルとなります。

こうなってしまうと、曲線でないと上手くフィットしないようなデータセットに対して直線モデルを適用するような形となり、アンダーフィッティング(under fitting)となります。オーバーフィッティングの反対ですね。


3週目はロジスティック回帰についてでした。基礎的な学習が続きましたね。
4,5週目は、ニューラルネットワークについて学習していきます。

コメント

タイトルとURLをコピーしました