ディープラーニング講座「機械学習」要点まとめ


私は、2020年7月に<font color="red">__「G検定（2020 #2）」__</font>に合格した。
次は、2021年2月実施の「E資格（2021 #1）」受験資格である__JDLA認定プログラム「３カ月で現場で潰しが効くディープラーニング講座」__に2020年8月から挑戦中。

本記事では、__JDLA認定プログラム「3カ月で現場で潰しが効くディープラーニング講座」__の課題であり、__「機械学習」__に関する多くのモデルやパラメータの推定手法、モデルの評価方法などの要点をまとめる。

##１．線形回帰・非線形回帰モデル

　ある入力（離散あるいは連続値）から出力（連続値）を予測する問題を__回帰問題__という。その回帰問題の中でも、出力（連続値）を直線で予測するモデルを__線形回帰モデル__といい、曲線で予測するモデルを__非線形回帰モデル__という。

###１－１．線形回帰モデル

　線形回帰モデルは教師データと言われる説明変数データ$x$と目的変数データ$y$をインプットにパラメータ$w$を学習させる__教師あり学習__で、入力のベクトルが多次元でも出力は1次元となる線形結合のモデルである。インプットデータには回帰直線（説明変数が1次元）や回帰曲面（説明変数が多次元）に誤差$\varepsilon$が加わっていると仮定し、最小二乗法を用いて未知である$w$を機械学習で学習する。

```math
y＝w_0+w_1 x_1+\varepsilon\;\;\;※説明変数が1次元の場合\\
y＝w_0+w_1 x_1+w_2 x_2+\varepsilon\;\;\;※説明変数が多次元の場合\\
```

次元数に関わらず一つの式にまとめると

```math
\hat{y}＝w^T x+w_0=\sum_{j = 1}^{m}w_j x_j+w_0
```

###１－２．非線形回帰モデル

　非線形回帰モデルは基底関数と呼ばれる既知の非線形関数$\phi(x)$とパラメータベクトル$w$の線形結合を使用してモデル化される。線形回帰モデルの違いとしては、$x$が$\phi(x)$に代わるのみでパラメータベクトル$w$は線形のままで考えることができる。

```math
y_j＝w_0＋\sum_{j = 1}^{m}w_j \phi_j(x_i)+\varepsilon_i
```
　よく使われる基底関数には以下のものがある。

* 多項式関数
 
```math
\phi_j(x)＝x^j
```

* ガウス型基底関数

```math

\phi_j(x)＝exp \biggr\{ \frac{(xー\mu_j)^2}{2h_j} \: \biggl\}

```

* スプライン関数／Bスプライン関数

　非線形回帰モデルは上記基底関数を利用することでより複雑なモデルと構築することが可能であり、学習データに対して表現力の低い（十分小さな誤差が得られない）モデルを__未学習__といい、学習データにた指定表現力の高い（小さな誤差は得られたがテスト集合誤差との差が大きい）モデルを__過学習__という。過学習なモデルを適切なモデルに調整するために以下の3つの対策がある

* 対策1　学習データ数を増やす
* 対策2　__不要な基底関数（変数）を削除__して表現力を抑止する
* 対策3　__正則化法を利用__して表現力を抑止する （L1ノルム,L2ノルム）

##２．ロジスティック回帰モデル

* ロジスティック回帰モデル：ある入力（数値）からクラスに分類する問題に利用される

　・入力：m次元のベクトル(m=1の場合はスカラ)、出力：0or1の値
　・分類問題を解くための教師あり機械学習モデル（教師データから学習）
　・入力とm次元のパラメータの線形結合をシグモイド関数に入力、出力はy=1になる確率の値になる


* シグモイド関数：

　・入力は実数で、出力は必ず0-1の値
　・単調増加関数で確率を表現
　・パラメータ$a$を増加させると$x=0$付近での曲線の勾配が増加

```math

\sigma(x)＝\frac{1}{1+exp(-ax)}

```

![sigmoid.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/34c912dc-7ae3-f4ea-5fef-a760714fa95b.png)

　・シグモイド関数の性質
　　　シグモイド関数の微分は、シグモイド関数自身で表現することが可能


```math

\frac{\partial \sigma(x)}{\partial θx} = \frac{\partial}{\partial θx} \biggr ( \frac{1}{1+exp(-ax)}\biggl ) \\
=a\sigma(x)\bigl(1-\sigma(x)\bigr)

```

　・シグモイド関数の出力をY=1になる確率に対応させる
![logistic.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/c987c1df-51be-078f-92fc-e24110bd26e8.jpeg)

* 最尤推定：

　・ロジスティック回帰はベルヌーイ分布を利用
　・ベルヌーイ分布：確率pで１、確率1-pで0をとる、離散確率分布

```math

P(y)=p^y(1-p)^{1-y}

```

　・尤度関数を作るにあたり同時確率を考える必要がある
　　　同時確率：あるデータが得られた時、それが同時に得られる確率
　　　確率変数は独立であることを仮定すると、それぞれの確率の掛け算となる
　・尤度関数を最大化するようなパラメータを選ぶ推定方法を最尤推定という
　・y_1～y_nのデータが得られた際の尤度関数

```math

\begin{align}
P(\color{blue}{y_1,y_2,\cdots ,y_n}|\color{red}{w_o,w_1,\cdots,w_m})
 &=\prod_{i=1}^n \color{red}{p_i}^{y_i}(1-\color{red}{p_i})^{1-y_i}\\
&=\prod_{i=1}^n \sigma(\color{red}{w}^T\color{blue}{x_i})\color{blue}{^{y_i}}(1-\sigma(\color{red}{w}^T\color{blue}{x_i}))^{1-\color{blue}{y_i}}\\
&=L(\color{red}{w})\qquad ※\color{red}{未知},\color{blue}{既知}\\
\end{align}

```

　・尤度関数を最大とするパラメータを探す
　　→→　対数をとると微分の計算が簡単
　　　　　・同時確率の積が和に変換可能
　　　　　・指数が積の演算に変換可能
　　　　　・対数尤度関数が最大になる点と尤度関数が最大になる点は同じ
　　→→「尤度関数にマイナスをかけたものを最小化」し、「最小2乗法の最小化」と合わせる


```math

\begin{align}
E(w_0,w_1,\cdots,w_m) &= -logL(w_0,w_1,\cdots,w_m)\\
&=\sum_{i=1}^{n} \bigl\{ y_ilogp_i+(1-y_i)log(1-p_i) \bigr\} \\
\end{align}

```


* 学習済みのロジスティック回帰モデルの性能を測る指標

　・混同行列（confusion　matrix）
![confusion_matrix.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/2fe16d5d-e2ef-98a0-df0b-c3edfa4c4232.jpeg)


　・正解率：「予測対象となった全データ」の中から「正解した数（True）」

```math

\frac{TP＋TN}{TP+FN+FP+TN} 

```

　・再現率（Recall）：「本当にPositiveなもの」の中から「Positiveと予測できる割合

```math

\frac{TP}{TP+FN} 

```

　・適合率（Precision）：モデルが「Positiveと予測」した中で「本当にPositive」のである割合

```math

\frac{TP}{TP+FP} 

```

##３．主成分分析

・多変量データの持つ構造をより小数個の指標に圧縮（次元圧縮）
　　・変量の個数を減らすことに伴う、情報の損失はなるべく小さくしたい
　　・少数変数を利用した分析や可視化（2・3次元の場合）が実現可能

・係数ベクトルが変われば線形返還後の値が変化
　　・情報の量を分散の大きさと捉える
　　・線形変換後の変数の分散が最大となる射影軸を探索する
　　・線形変換後のベクトル

```math

S_j=(S_{1j},\cdots,s_{nj})^T=\bar{X}a_j　\qquad a_j\in\mathbb{ R^m }

```

　　・線形変換後の分散

```math

\begin{align}
Var(S_j) &=\frac{1}{n} S_j^TS_j=\frac{1}{n} (\bar{X}a_j)^T(\bar{X}a_j)=\frac{1}{n} a_j^T \bar{X}^T \bar{X}a_j\\
&=a_j^T Var(\bar{X})a_j
\end{align}

```

　　・制約を付け最適化問題を解く
　　　　・ノルムが1となる制約を入れる（制約を入れないと無限に解がある）


```math

\begin{align}
目的&変数：\\
&arg\: \max_{a_j\in\mathbb{ R^m }}\:a_j^TVar(\bar{X})a_j\\

制約&条件：\\
&a_j^Ta_j=1
\end{align}

```

・制約つき最適化問題の解き方
　　ラグランジュ関数を最大にする係数ベクトルを探索（ [参考：ラグランジュの未定乗数法](#参考-ラグランジュの未定乗数法)　）



```math

\begin{align}
ラグ&ランジュ関数：\\
&E(a_j)=a_j^T Var(\bar{X})a_j- \lambda(a_j^Ta_j-1)

\end{align}

```

　　ラグランジュ関数を最大化する係数ベクトルは、ラグランジュ関数を微分して最適解を求めればよい

```math

\begin{align}
a_jで&偏微分：\\
&\frac{\partial E(a_j)}{\partial a_j}= 2Var(\bar{X})a_j- 2\lambda(a_j)=0\\
最適&解：\\
&Var(\bar{X})a_j= \lambda(a_j)
\end{align}

```

　　元のデータの分散共分散行列の固有値と固有ベクトルが制約つき最適化問題の解となる
　　また、射影先の分散は固有値と一緒となる

```math

\begin{align}

Var(s_1)= a_1^T Var(\bar{X})a_1= \lambda_1 a_1^Ta_1= \lambda_1

\end{align}

```

・分散共分散行列は正定値対称行列で固有値は必ず0以上・固有ベクトルは直行となる

・m次元のデータを扱う場合、最大m個の固有値と固有ベクトルのペアが出現する　その際、k番目の固有値を昇順で並べ、対応する固有ベクトルを第k主成分と呼ぶ

・第1～元次元分の主成分の分散は、元のデータの分散と一緒となり、固有値の和は元のデータの分散と一緒となる。


```math

\begin{align}

元データの&総分散\:V_{total}=\\
&主成分の総分散\:\sum_{i=1}^{m} \lambda_i

\end{align}

```

・寄与率 $C_k$：第k主成分の分散の全分散に対する割合（第k主成分が持つ情報量の割合）

```math

\begin{align}

C_k&=\frac{\lambda_k}{\sum_{i=1}^{m} \lambda_i}\\
&※分母：主成分の総分散\\
&　分子：第k主成分の分散

\end{align}

```


・累積寄与率 $r_k$：第1-k主成分まで圧縮した際の情報損失量の割合

```math

\begin{align}

r_k&=\frac{\sum_{j=1}^{k} \lambda_j}{\sum_{i=1}^{m} \lambda_i}\\
&※分母：主成分の総分散\\
&　分子：第1～k主成分の総分散

\end{align}

```


##４．k近傍法、k平均法のアルゴリズム

###４－１．k近傍法（kNN）

　・分類問題のための機械学習手法
　・最近傍のデータを$k$個取ってきて、それらがもっとも多く所属するクラスに識別

![knn.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/c1f68816-ea0b-b301-387e-56b982dd7d39.jpeg)


　・$k$を変化させると結果も変わる

![knn2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/e1f11d36-5cf0-c166-4794-b33390f99bda.jpeg)


　・$k$を大きくすると決定境界は滑らかになる

![knn3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/c1b53d7e-d38b-399c-9a71-abf0c4793f50.jpeg)

###４－２．k-平均法（k-means）

　・教師なし学習
　・クラスタリング手法　・・・特徴の似ているもの同士をグループ化する手法
　・与えられたデータを$k$個のクラスタに分類する
![k-means1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/48b92141-3979-27d0-38bc-a86870cd72c2.jpeg)
　・中心の初期値を変えるとクラスタリング結果も変わりうる
　　$k-means++$を利用し初期値を与えるとうまくクラスタリングできる
![k-means2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/b02260ad-99b7-7950-d48b-77c40b01ddb2.jpeg)

　・$k$の値を変えるとクラスタリング結果も変わる
![k-means3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/17afe490-246f-1f77-7508-2277c6f4f37e.jpeg)

　・$k$平均法（$k-means$）のアルゴリズム
　　1)各クラスタ中心の初期値を設定する
![k-means4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/36e6be1e-9458-de89-fb6f-50d3ca16411f.jpeg)

　　2)各データ点に対して、各クラスタ中心との距離を計算し、最も距離が近いクラスタを割り当てる
![k-means5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/8e475ace-8050-08e0-c0c0-b55c119d0aeb.jpeg)

　　3)各クラスタの平均ベクトル（中心）を計算する
![k-means6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/b9bd00fb-fb82-2641-2316-4a4999e0704b.jpeg)

　　4)収束するまで2,3の処理を繰り返す
![k-means7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/cf4fcfff-676a-a1ab-9da6-a77ac8b0dc83.jpeg)




##５．サポートベクターマシン

　__サポートベクターマシン__とは、サポートベクトルを用いた2クラス分類のための機械学習手法。__サポートベクトル__とは、境界線と最も近くにあるデータのことであり、境界線とサポートベクトルまでの距離を__マージン__と言う。

![svm1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/a18ad7c1-6e4f-9da2-ef55-2583cac43af5.jpeg)

　上図では、二次元の数ベクトル空間上で表現しているが、実際はn次元数ベクトル空間上の超平面を想定しており、その超平面を表す式を以下のように示すことができる。

```math

\begin{align}

\omega^Tx_i+b=0\\

\end{align}

```

また、上式より2クラスに分類された上図の黄点、桃点は以下の式で表すことができる。

```math

\begin{align}

\omega^Tx_i+b>0\qquad （x_i\in 黄クラス）\\
\omega^Tx_i+b<0\qquad （x_i\in 桃クラス）\\

\end{align}

```

$i$番目のデータ$x_i$が黄クラスに属する場合を$t_i=1$、桃クラスに属する場合を$t_i=-1$とするラベル変数tを導入すると、以下の式で表すことができる。


```math

\begin{align}

t_i(\omega^Tx_i+b)>0\qquad 

\end{align}

```

<br>
マージンをKとしたときに全てのデータ点で成り立つ条件を導き出すため、
![svm2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/1af456f9-0c4e-aabf-3d4c-d048714ed4c8.jpeg)

<br>
各点と超平面との距離を、点と直線との距離の公式から導くと、以下の式で表すことができる。

```math

\begin{align}

\frac{t_i(\omega^Tx_i+b)}{\|w\|}\\

\end{align}

```

マージンとは超平面と最も距離の近い点との距離なので、以下の式となる。

```math

\begin{align}

\min_{i}\frac{t_i(\omega^Tx_i+b)}{\|w\|}\\

\end{align}

```

![svm3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/5f28b12d-762f-a3e0-5cdf-4e66c864f27a.jpeg)

サポートベクターマシンは、上式で表したマージンを最大化することが目標であるため、目的関数は以下のように表すことができる。

```math

\begin{align}

\max_{\omega ,b} \Bigr[\min_{i}\frac{t_i(\omega^Tx_i+b)}{\|w\|}\Bigl]\\

\end{align}

```

マージン上の点においては、$t_i(\omega^Tx_i+b)=1$が成り立つことから、上記目的関数が以下のようになる。

```math

\begin{align}

\max_{\omega ,b} \frac{1}{\|w\|}

\end{align}

```



![svm4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691536/b51513b2-9bb5-2f62-f27b-d983db6f2736.jpeg)




## 参考-ラグランジュの未定乗数法

　制約つきの最適化問題を解く上で必要なラグランジュの未定乗数法について説明。

[参考ページ：高校数学の美しい物語～ラグランジュの未定乗数法と例題～](https://mathtrain.jp/mlm)

$g(x,y)=0$のもとで$f(x,y)=0$を最大化する解を求める。

```math

\begin{align}
ラグ&ランジュの未定乗数法\\
&L(x,y, \lambda )=f(x,y)-\lambda g(x,y) を作ると、\\
&(\alpha,\beta)が極値を与える(\alpha,\beta)は\\
&\frac{\partial L}{\partial x}=\frac{\partial L}{\partial y}=\frac{\partial L}{\partial \lambda}=0の解。\\
&または\frac{\partial g}{\partial x}=\frac{\partial g}{\partial y}=0の解となる。
\end{align}

```

###関連ページ

* [ディープラーニング講座「応用数学」要点まとめ](https://qiita.com/Shinji333/items/3aec7b74d5bbd6fdd383)
* ディープラーニング講座「機械学習」要点まとめ＜本記事＞
* [ディープラーニング講座「機械学習」実装演習](https://qiita.com/Shinji333/items/42e820362fb2169c9f8a)
* [ディープラーニング講座「深層学習：Day1」要点まとめ＆実装演習]
(https://qiita.com/Shinji333/items/b4ea4c4d6047bb0255f4)
* [ディープラーニング講座「深層学習：Day2」要点まとめ＆実装演習](https://qiita.com/Shinji333/items/e55f0183e1214cde16dc)
* [ディープラーニング講座「深層学習：Day3」要点まとめ＆実装演習](https://qiita.com/Shinji333/items/b8d9c10ce66733bd78f3)
* [ディープラーニング講座「深層学習：Day4」要点まとめ＆実装演習](https://qiita.com/Shinji333/items/56a289a0e198b735fd47)