第６章　教師あり学習：分類 pg212 ~ 【Pythonで動かして学ぶ！ あたらしい機械学習の教科書】

https://www.amazon.co.jp/Python%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E5%AD%A6%E3%81%B6%EF%BC%81-%E3%81%82%E3%81%9F%E3%82%89%E3%81%97%E3%81%84%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E4%BC%8A%E8%97%A4-%E7%9C%9F/dp/4798144983
## 絡んでくる知識
- 最尤推定
- ロジスティック回帰
- 交差エントロピー誤差
- 勾配法
- 2次元入力2クラス分類
    - ロジスティック回帰
- ２次元入力3クラス分類

それぞれ、何をしているか
。分類をするのにこれらの計算をなぜ使うのか

## 最尤推定(pg212)
まずは、最尤推定から、
ある事象（今回の場合1~3回目がt=0, ４回目がt=１）から、それぞれの事象が起こりうる尤もらしい確率を推定する。

$P(t=1|x)=w$
あるxという入力でt=1となる確率wという式。

T=[0,0,0,1]なので、普通に考えれば1/4でしょ！
となるが、これを最尤推定で求める。

##### w=0.1の時の尤度を求めてみる
$w=P(t=1|x)=0.1$なので、t=1となる確率（尤度）は$0.9*0.9*0.9*0.1=0.0729$（それぞれの値が[0,0,0,1]で出てくる確率（w=1の時））
>
これら４つを掛け合わせる理由は
T=[0,0,0,1]が出る時の確率を求めたいので、
（１回目t=0となる確率0.9）×（２回目t=0となる確率0.9）×（３回目t=0となる確率0.9）×（４回目t=1となる確率0.１）=(T=[0,0,0,1]となる確率)
と表すことができるから。
そして、最尤推定はこの、0.9, 0.1というwが尤もらしいかどうかを求める計算

よって、w=0.1の時の尤度は0.0729

これが、w=0.2のときは？？
$0.8*0.8*0.8*0.2=0.1024$で
w=0.2の時の尤度は0.1024
どちらの方が尤度が高いかというと、もちろん後者なので、t=1となる確率wが0.2の時の方が尤もらしい。

<font color="Red">これが最終的にはw=0.25($1/4$)の時が一番高くなる。</font>

**この、どの確率が最もそれらしい確率かを解析的に求めるために0~1の範囲でどこのwが一番良いかを考える**
・それを求めるのに、式を一般化して、それぞれの数をぶち込めるようにする。
それが、
$$
P(T=0,0,0,1|x)=(1-w)^3w
$$
で表せる。

これを0~1の入力値wの範囲で表したときに山形になり(P214)
、頂点部分のが最も尤もらしいwであると言える。

####それでは、最大値を求めてみよう！
$P=(1-w)^3(w)$の対数をとって計算を楽にして最大値を求めてみる（対数をとっても最大をとる時のwは変わらない）
対数をとったものが↓
$logP=log{(1-w)^3w}=3log(1-w)+log{w}$
（普通に対数をとる時の計算。累乗が降りてきて足し算になる）

#####微分して傾き=0の箇所を探す
$\frac{\partial}{\partial w}logP=\frac{\partial}{\partial w}[3log(1-w)+log w]=0$![iOS の画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381710/f797dc43-9cbf-8af6-8c66-3f90283f0a5d.jpeg)

<font color="Red">よってここで言っていることは、$w=\frac{1}{4}$　の時が一番,
T=[0,0,0,1]が最も生成されるであろうモデルパラメータである。ということ</font>

w＝1/4が最尤推定。

**最尤推定初歩版終了！**

## ロジスティック回帰モデル(P216)
・ロジスティック回帰モデルを使うことで、入力xを0~1の範囲に圧縮することができるので、分類の確率として使いやすい。

直線モデルにシグモイド関数を通すことで、xがt=1となる確率を次のように表せる
**ロジスティック回帰**
$$
y=w_0x+w_1\\
$$
$$
y=\sigma(w_0x+w_1)=\frac{1}{1+exp(-(w_0x+w_1))}
$$

## （平均）交差エントロピー誤差

・ロジスティック回帰を確率とみなす（前回のwの値）
・そこで、入力値xから
・良い感じの重みwを求めたい。次に求めたwを使って、作成したモデルにxの値を入力すると予測値が得られる。

$$
y=\sigma(w_0x+w_1)=P(t=1|x)
$$　　
この時のyは、確率を表す。
いきなり、シグモイド関数が出てきたが、これは今まで扱っていた確率wをyに置いたもの。（シグモイド関数を利用することで入力値x（$y=w_0x+w_1$）から求められるyを）確率として表せますよ。ということを言っている。

⭐️**以上のことから、$y=w=\sigma(w_0x+w_1)=P(t=1|x)$となる。**

>
(重要):
P218ではこのモデルのパラメータ$w_0$と$w_1$が虫のデータに合うように最尤推定する。
「このモデルから虫のデータが生成されたとして、最もあり得る（確率的に高い）パラメータを求める。」
>
前説では、T=[0,0,0,1]について考えたが、今回は全てのケースに応用できるように考える。

P218
>データが１つだけだとし、ある体重xに対してt=1だったら、t=１がモデルから生成される確率は、ロジスティック回帰モデルの出力値yそのものです。

という記載があるがこれはどういうことか。
![iOS の画像 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381710/1d1d4a2f-360b-d668-6786-e6c701f5923c.jpeg)

前のページの画像です。
**これをみるとロジスティック回帰モデルは直線式モデル（この直線式は入力値xから値yを求める直線式）がシグモイド関数によって1~0の範囲で押し潰されているので確率として扱うことができる。**

なので、ここでは
y=(t=1である確率)
1-y=(t=0である確率)
として扱う。

このことを一般化したモデルが矢印
$$
P(t|x)=y^t(1-y)^{1-t}
$$

---
それで今度はデータ数がN個だった場合を考える
前節でT=[0,0,0,1]というのを考えていたところを
X=[$x_0, x_1,・・・,x_n$]
T=[$t_0, t_1,・・・,t_n$]
（T=[0,0,0,1,1,1,0,1,・・・N個]）というパターンを考える。

前節でやったようにT=[0,0,0,1]のときは[$0.8*0.8*0.8*0.2=0.1024$]みたいに求めてたものを、一般化した式でも同じように最尤推定を求めるべきなので、$x_0~x_n$までの全パターンを全て掛け合わせれば良い
>これがP219のところで言っている「１つ１つのデータの生成確率を全てのデータで掛け算すれば良いので、式(6-15)のようになる。これが尤度です。」

の箇所である。

なので式（6-15)は以下のようになる（全て掛け合わせているから
$$
P(T|X)=\prod_{n=0}^{N-1}P(T|X)=\prod_{n=0}^{N-1}y_n^{t_n}(1-y_n)^{1-t_n}
$$
<font color="Blue">**_となり、これが尤度を表す。（P214の山形のグラフのこと）_**</font>

これを、前回同様対数をとって式を簡単にすると、対数尤度が↓
$$
logP(T|X)=\sum_{n=0}^{N-1}[\{t_nlogy_n+(1-t_n)log(1-y_n)}]\hspace{70pt}(6-16)
$$

**それでもってこれも前回同様、のこの確率値の最大のものを選べば良い（それが最大尤度だから$w_0とw_1$が求められる。）**

<font color="DarkGoldenRod">
これに、-1をけかけて上下逆転させ、Nで割ったものを「平均交差エントロピー誤差（$E(n)$）」とよあれる
</font>

$$
E(n)=-\frac{1}{N}logP(T|X)=-\frac{1}{N}\sum_{n=0}^{N-1}[\{t_nlogy_n+(1-t_n)log(1-y_n)}]\hspace{70pt}(6-17)
$$

<font color="Red">**あとは計算して、この最小値の時の$w_0, w_1$が適切なwなので解析かいで$w_0=1, w_1=1$と適当に入れてそこから偏微分で傾きを調べて、傾きが小さい方に進んでいけばOK!**</font>

##2次元入力2クラス分類(P228)
虫で例えると、重量($x_1$)と体長($x_2$)の入力があり（2次元入力）、オスかメス（2クラス）を見分ける。
###1ofK符号法
それぞれのクラスのどこに分類されるかを表す表し方
![iOS の画像 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381710/24eac1af-d7ac-e334-3443-3ac27b1d06c9.jpeg)

##ロジスティック回帰モデル(2次元入力ver.)
前回までは1次元入力で考えていたので、今回は2次元入力を考える。

P232$y=\sigma(a)$を考える
$$
y=\sigma(a)
$$
前回までは、このaは$w_ox+w_1$と表されていて、1次元入力だったが、これを2次元入力で考える。
そうなるとa=の部分が[$a=w_0x+w_1$]から→[$a=w_0x_0+w_1x_1+w_2$]となる。

前回同様に、これをシグモイド関数に通したものがt=1ort=0の確率(y)となる。
（今回はt=0の時の確率をy、t=1の時の確率を1-yとしている）

よって、
$P(t=0|x)=\sigma(a)=y$
$P(t=1|x)=\sigma(a)=1-y$
というモデルになる。

一般化したモデルが、これも前回同様に$P(t|x)=y^t(1-y)^{1-t}$となるので、これの平均交差エントロピー誤差を求める損失関数は
$$
E(w)=logP(T|X)=\sum_{n=0}^{N-1}[\{t_nlogy_n+(1-t_n)log(1-y_n)}]\hspace{70pt}
$$
をそのまま使える。

**この交差エントロピー誤差の最小値を勾配法で求めれば適切な値$w_0,w_1,w_2$が求めれる。**

>
最終的に、これを計算した$w_0,w_1,w_2$を使ってそれぞれ$y=\sigma(a)$（$a=w_0x_0+w_1x_1+w_2$）のwにその値を入れることで、誤差が少ない分類モデルを作成できる。

その作成した分類モデルのグラフが、P238にあるグラフで、その境界線がそれぞれのクラスを分ける境界線となる。

## 2次元入力3クラス分類
ここからは、入力が2次元のままだが、分類するクラスが3つある場合を考える。
これは、モデルの出力にシグモイド関数の変わりに、ソフトマックス関数を導入することで3クラス以上の分類に対応させることができる。

例えば、3クラスの分類問題であれば、3つのクラスに対応する入力総和$a_k(k=0,1,2)$を考える
$$
a_k=w_{k0}x_0+w_{k1}x_1+w_{k2}\hspace{20pt}(k=0,1,2)\hspace{40pt}(6-40)
$$

現状では$X=[x_0,x_1]$と２つの入力だが、そこに常に１をとるダミー入力値$x_2$を設定してあげる。そうすると
$$
a_k=w_{k0}x_0+w_{k1}x_1+w_{k2}x_2=\sum_{i=0}^{D}w_{ki}x_{i}\hspace{10pt}(k=0,1,2)
$$
となる。

それで前回同様に、シグモイド関数に入れてた手順を、$a_k$をソフトマックス関数に入れるようにする。
$$
ソフトマックス関数=y_i=\frac{exp(x_i)}{\sum_{j=0}^{K-1}exp(x_j)}
$$
このxのところが総和$a_k$に変わるので、今回使うモデルは
$$
y_i=\frac{exp(a_k)}{\sum_{k=0}^{K-1}exp(a_k)}
$$
となる。
下辺の和の部分をuと置く
$u=exp(a_0)+exp(a_1)+exp(a_2)$
それで得られる式は

$$
y_k=\frac{exp(a_k)}{u}\hspace{20pt}(k=0,1,2)
$$

となる。

<font color="Red">
あとは、前節でやったことと同じことをやってあげる
・それぞれの確率の式を出してそれを一般化した式を作成$P(t|x)=y_0^{t_0}y_1^{t_1}y_2^{t_2}$(P242)
・そして、Nこのデータが生成された確率を出すのに全て掛け算してあげる
・最後に対数尤度をとって最小値を求め、適切なwを導き出す。
・そのwを使って分類するためのモデルを作成（分類線を表示させることができる式を得られる）

**訓練データを使って分類するためのモデルを作る、そのモデルにテストデータを入れればクラス分類が出されるような仕組み**

</font>