
- Week3
[機械学習]
Week3
分類と表現 (Classification and Representation)
- 多くの場合、分類問題で線形回帰を使うのはあんまりよくない(うまいことデータセットを2分できない)
- じゃあ ロジスティック回帰 使うぜ
ロジスティック回帰の仮説関数
- h_\theta(x) = g(\theta^T x)
- z = \theta^T x とおいて
- g(z) = \frac{1}{1 + e^{-z}
これは シグモイド関数 、もしくはロジスティクス関数と呼ばれる。
- シグモイド関数
- y の値は 1 or 0 に限りなく近づく
- 余談だが、ここでシグモイド関数を使って入力値を0~1の範囲にまとめることをパーセプトロンと言う。
- (日本語のWikipediaはあまり詳しくないので英語版読んで)
- 境界値により、0か1であることを判定してもよいのだが、それではグラフがカクカクになってしまう。シグモイド関数のような滑らかな関数を使うことで、もうちょっと融通の利く、しかしながら0か1の信号化が可能になる。
決定境界 (Decision Boundary)
- 関数gに \theta^T X を与える場合
- h_\theta(x) = g(\theta^T X) \geq 0.5 \\ \text{when } \theta^T X \geq 0
- シグモイド関数と式の形から以下のことが言える(だいたい言えるということが言えるw)
- \theta^T X \geq 0 \Rightarrow y = 1
- \theta^T X < 0 \Rightarrow y = 0
ロジスティクス回帰 (Logistic Regression Model)
目的関数(Cost Function)
正しくデータセットを2分するための目的関数J(θ)を定める。
- J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \text{Cost}(h_\theta(x^{(i)}), y^{(i)})
- \text{Cost}(h_\theta(x), y) = -log(h_\theta(x)) \hspace{10} \text{if y = 1}
- y = 1, のとき仮説関数J(θ)は、hθ(x)が0に近づくほど大きくなり、hθ(x)が1に近づくほど小さくなる
- \text{Cost}(h_\theta(x), y) = -log(h_\theta(x)) \hspace{10} \text{if y = 1}
- \text{Cost}(h_\theta(x), y) = -log(1 - h_\theta(x)) \hspace{10} \text{if y = 0}
- y = 0, のとき仮説関数J(θ)は、hθ(x)が0に近づくほど小さくなり、hθ(x)が1に近づくほど大きくなる
このJ(θ)はロジスティクス回帰に対して 凸関数 である。だから絶対大小が定まる。
単純化された目的関数と最急降下法 (Simplified Cost Function and Gradient Descent)
上述の目的関数は場合分けせずとも、1つの関数で表せるようだ。これからはそれを使っていく。
- Cost(h_\theta(x), y) = -y \cdot log(h_\theta(x)) - (1-y) \cdot log(1-h_\theta(x)
- 前半の-y, 後半の (1-y) がポイントで、こいつらがyの場合分けを数式的に表している。わりとわかりやすい。
- 完全な目的関数(データセットが増えても対応できるやつ)
- J(\theta) = - \frac{1}{m} \sum_{i=1}^m [y^{(i)} \cdot log(h_\theta(x^{(i)}) + (1-y^{(i)}) \cdot log(1-h_\theta(x^{(i)})) ]
- 以下はそれをベクトル化したやつ ... h = g(X\theta) とおいて
- J(\theta) = \frac{1}{m} \cdot \left( -y^T log(h) - (1-y)^T log(1-h) \right)
最急降下法
お待ちかねの最急降下法の実装
- まず、普通に
- \text{Repeat} \bigl{ \\ \hspace{10} \theta_j := \theta_j - \alpha \frac{\delta}{\delta\theta_j} J(\theta) \\ \bigr}
- ベクトル化されたもの
- \theta_j := \theta - \frac{\alpha}{m} X^T (g(X\theta) - \vec{y})
クイズのヒント
- 決定境界の理解が必要
- 最急降下法の傾きの求め方について、式が変形されてもわかってないといけない
- ロジスティック回帰の目的関数は → J(\theta) = - \frac{1}{m} \sum_{i=1}^m [y^{(i)} \cdot log(h_\theta(x^{(i)}) + (1-y^{(i)}) \cdot log(1-h_\theta(x^{(i)})) ]
- ここは数学の知識が無いからわからんのだが、微分すると以下になるのだと思う
- 普通に最急降下法を求めようとすると → \theta_j := \theta_j - \alpha\frac{\partial}{\partial \theta_j}J(\theta) = \theta_j - \alpha \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)}) x_j ^{(i)}
- あと、シグモイド関数を代入した形も正解になるような
複数要素の分類問題 (Multiclass Classification)
オーバーフィッティング問題の解決 (Solving the Problem of Overfitting)
オーバーフィッティング問題(線形回帰、ロジスティック回帰)
- オーバーフィッティング問題はフィーチャーが多くある場合、それに対して仮説関数h(θ)を過剰に合わせすぎることによって起こる
- オーバーフィッティングした関数は、その時のデータセットにはよく一致するが未来のデータセットを予測できない
オーバーフィッティング問題の取り扱い
- どうにかして仮説関数をプロットして視覚化したいけど、フィーチャーが多いと難しい
- 選択肢1
- どのフィーチャーを使うか任意で選択する
- 選択のためにアルゴリズムを使う
- 選択肢2
- Regularization(正規化)を使う
目的関数 (Cost Function)
- Regularizationとはなんぞや?
- 目的関数J(θ)にある種のペナルティを課すことで、それを平坦化する
- J(\theta) = \frac{1}{2m} \big[ \sum_{n=1}^m ( h_\theta(x^{(i)}) - y^{(i)} )^2 + \lambda \sum_{j=1}^n \theta^2_j \big]
- ラムダ以降の式が大きくなるほど目的関数が平坦化してオーバーフィッティングしにくくなるぞい
このラムダ式のことを「正規化パラメーター」というらしい
クイズのヒント
Week3 Quiz2はわりと簡単だったので1回で解けた。よってヒントは無しです。
Octave演習
足りない数学知識
- Octaveでネイピア数を出すには
>> exp(1) ans = 2.7183
- シグモイド関数を実装すると、引数が大きくなるほど結果は1に漸近し引数が小さくなるほど0に漸近する
>> sigmoid(300) ans = 1 >> sigmoid(1) ans = 0.73106 >> sigmoid(0.5) ans = 0.62246 >> sigmoid(-2) ans = 0.11920 >> sigmoid(-200) ans = 1.3839e-87 >> sigmoid(-133) ans = 1.7331e-58
1024px-SigmoidFunction.png