Coursera Machine Learning の受講記録（Week3）

[Machine Learning by Stanford University](https://www.coursera.org/learn/machine-learning/home/welcome) WEEK3 のまとめ

#分類　クラシフィケーション
## ロジスティック回帰
ex) 腫瘍の大きさにより、悪性か良性かを分類する　という例
![Kobito.N536qo.png](https://qiita-image-store.s3.amazonaws.com/0/102387/53bdf616-7d75-4349-281b-1e15539520ca.png "Kobito.N536qo.png")

yの値は0か1になる

hθ(x) = g(θTx)
z = θTx
g(z) = 1/ (1+e^-z)

g(z)はシグモイド関数またはロジスティック関数という
![Kobito.yIrmoy.png](https://qiita-image-store.s3.amazonaws.com/0/102387/830ea247-31e6-8ed1-922f-efd7d407a02b.png "Kobito.yIrmoy.png")

hθ(x) = 0.7 の場合、70%の確率で悪性(1)、30%の確率で良性(0)になる。
これを式で表すと以下の通り　（P(y=1|x;θ)はx,θをパラメータとしてy=1である確率の意味）
![Kobito.e3dynU.png](https://qiita-image-store.s3.amazonaws.com/0/102387/aaf7ad23-3fba-c2bb-e737-6ae1dd655ab9.png "Kobito.e3dynU.png")


## ロジスティック回帰の決定境界
シグモイド関数(ロジスティック回帰)で定義されるh(x)が0.5以上の場合は1, 0.5未満の場合は0と判断できる。

![Kobito.vdaiSz.png](https://qiita-image-store.s3.amazonaws.com/0/102387/f223e5d6-2b4d-e707-7699-29f86ba9e8e6.png "Kobito.vdaiSz.png")

hθ(x) = g(θTx)
z = θTx
g(z) = 1/ (1+e^-z)
なので、
![Kobito.TP06e4.png](https://qiita-image-store.s3.amazonaws.com/0/102387/3f8f834e-b95a-d293-b4ab-3d104f6955cb.png "Kobito.TP06e4.png")
![Kobito.v35Mho.png](https://qiita-image-store.s3.amazonaws.com/0/102387/4387f3b4-0cee-07f8-9853-1cf16d0364d4.png "Kobito.v35Mho.png")
![Kobito.JBghoG.png](https://qiita-image-store.s3.amazonaws.com/0/102387/6d08c6ce-0b04-d90b-5607-025c5fcd5d75.png "Kobito.JBghoG.png")
![Kobito.lsVeYD.png](https://qiita-image-store.s3.amazonaws.com/0/102387/521181ea-6357-e081-bfeb-4ddd1bb424b5.png "Kobito.lsVeYD.png")

例）
![Kobito.SpMGWu.png](https://qiita-image-store.s3.amazonaws.com/0/102387/cf61ab0c-2260-3ff6-c864-fa320fb7fe70.png "Kobito.SpMGWu.png")

x1,x2は上記の式で表せる。この式で表現される境界値を決定境界と言う。

## ロジスティック回帰のコスト関数
![Kobito.Hx4zim.png](https://qiita-image-store.s3.amazonaws.com/0/102387/db8e1ac9-920b-54a5-72a0-eaa5c30f1131.png "Kobito.Hx4zim.png")

コスト関数をグラフ化すると以下の通り

y=1 の時　・・ hθ(x)＝1の時、J(θ）は1に漸近
![Kobito.vUjIHU.png](https://qiita-image-store.s3.amazonaws.com/0/102387/10c8406f-29fc-b95c-adc6-712db42fbbb7.png "Kobito.vUjIHU.png")

y=0 の時　・・ hθ(x)＝1の時、J(θ）は1に漸近
![Kobito.Wya3x6.png](https://qiita-image-store.s3.amazonaws.com/0/102387/15827a0d-3839-1dc8-4de5-0576f108da55.png "Kobito.Wya3x6.png")

![Kobito.TWn6pu.png](https://qiita-image-store.s3.amazonaws.com/0/102387/ce930529-1439-ef57-895b-6843d1a4db05.png "Kobito.TWn6pu.png")

上記をy=1,0に分けずに式にすると
![Kobito.ALDbS4.png](https://qiita-image-store.s3.amazonaws.com/0/102387/f4bcd289-e9c7-04cc-abbe-f684997d2e31.png "Kobito.ALDbS4.png")
この式は以下のように表せる。

![Kobito.z44J5z.png](https://qiita-image-store.s3.amazonaws.com/0/102387/4535b2c9-d400-0391-98d7-7903968bde5a.png "Kobito.z44J5z.png")

ベクトル化すると以下
![Kobito.5r4pJJ.png](https://qiita-image-store.s3.amazonaws.com/0/102387/fd9aea9c-bd69-724e-1583-49cb69e7196f.png "Kobito.5r4pJJ.png")


最急降下法は
![Kobito.1TlF5n.png](https://qiita-image-store.s3.amazonaws.com/0/102387/5be586d8-7f32-35db-1e6d-510001eff8c0.png "Kobito.1TlF5n.png")
これは以下のように表記できる。
![Kobito.aiQJna.png](https://qiita-image-store.s3.amazonaws.com/0/102387/2270d385-e727-f954-d280-128dd204a487.png "Kobito.aiQJna.png")
ベクトル化すると以下となる。
![Kobito.lyqLwV.png](https://qiita-image-store.s3.amazonaws.com/0/102387/5834ec72-7877-9820-2441-fcbdb7191b4d.png "Kobito.lyqLwV.png")


## 最急降下法以外のJ(θ）最適化アルゴリズム
最急降下法以外に、BFGS, L-BFGS, 共役勾配法がある。
これらのアルゴリズムの詳細はコースの範囲外なので触れない。
octaveにはfminunc　という最適化の為の関数が用意されている。
使用例は以下

```
function [jVal, gradient] = costFunction(theta)
  jVal = [...code to compute J(theta)...];
  gradient = [...code to compute derivative of J(theta)...];
end

options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
   [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
```

# マルチクラスの分類問題
2つのクラスの分類の応用として、複数クラスの分類をする際、以下のような考え方となる。
![Kobito.t3vBub.png](https://qiita-image-store.s3.amazonaws.com/0/102387/4740fef2-c6c5-4451-23fb-31a8b98b1bc3.png "Kobito.t3vBub.png")

![Kobito.pxcy5d.png](https://qiita-image-store.s3.amazonaws.com/0/102387/bc4b1633-e2e6-d9e3-0b4f-99b53bdde0f4.png "Kobito.pxcy5d.png")

k個のクラスに分類する際、k個の分類器hθ(x)　を定義し、最大値を取る分類器を採用する。

# オーバーフィッティング
## オーバーフィッティングとは、トレーニングデータが少なく、仮説関数の変数が多い場合に起こる。トレーニングデータに過剰に最適化してしまい、トレーニングデータ以外のデータに一般化されていない状態になってしまうこと。
下図の右のような状態。
![Kobito.3gzjs5.png](https://qiita-image-store.s3.amazonaws.com/0/102387/591bb928-e3bb-abdc-f445-e55aad61b042.png "Kobito.3gzjs5.png")

オーバーフィッティングを解決する方法は以下

- 変数の値を減らす
- 正規化
	- 変数の値は保持したまま、パラメータθを減らす
	- 正規化の手法を使う（後述）

## オーバーフィッティングを避ける為のコスト関数（正規化）
線形回帰を例にとると以下。

![Kobito.jckkjQ.png](https://qiita-image-store.s3.amazonaws.com/0/102387/0cd83904-6435-7093-35af-6054bd5e4d29.png "Kobito.jckkjQ.png")

これは、通常のコスト関数に
![Kobito.ru4mm3.png](https://qiita-image-store.s3.amazonaws.com/0/102387/b01bf180-bdec-cb18-23a0-739f2ba9f6a4.png "Kobito.ru4mm3.png")

を加えたもので、パラメータθの値をなるべく小さく取るという意味がある。
λは正規化パラメータと呼ばれる。

## 線形回帰の正規化
線形回帰に対して、最急降下法（正規化あり）を適用した場合の式は以下の通り
![Kobito.b9VTQY.png](https://qiita-image-store.s3.amazonaws.com/0/102387/be6daa61-d979-a17a-c28b-77dd9dfc9eba.png "Kobito.b9VTQY.png")

上記式のθ・-αλ/mの項以外は、正規化前の線形関数に対する最急降下法の式と同一で、(1-α・λ/m) < 1(ex)0.99・・）従って、正規化された最急降下法では、θの値がイテレート毎に減っていく事が分かる。

## 正規方程式の正規化
正規方程式の正規化は以下の通り

![Kobito.lYPO0A.png](https://qiita-image-store.s3.amazonaws.com/0/102387/c781142f-fc74-dd14-05f3-8140264c5bd8.png "Kobito.lYPO0A.png")

Lはn+1×n+1の行列

正規方程式の非可逆問題は正規化の為の式λ・Lを加える事によって解決する。（証明は省く）

## ロジスティック回帰の正規化
正規化用の項を最後に入れて以下のようになる
![Kobito.nOq018.png](https://qiita-image-store.s3.amazonaws.com/0/102387/fd25ea16-2db0-e581-93d4-bf0bbd2ce2cd.png "Kobito.nOq018.png")


最急降下法は以下の通り
![Kobito.5sgzmX.png](https://qiita-image-store.s3.amazonaws.com/0/102387/f5957ad6-c36d-58aa-5e3c-8abce006c4e5.png "Kobito.5sgzmX.png")