JDLA認定プログラム：機械学習

本記事は、Study-AI社様のJDLA認定プログラムの提出レポートを兼ねた記事となっております。


##  機械学習とは

> コンピュータープログラムは、タスクTを性能指標Pで測定し、その性能が経験Eにより改善される場合、タスクTおよび性能指標Pに関して経験Eから学習すると言われる（トム・ミッチェル 1997）

1. あるコンピュータープログラムにデータを入力しタスクTを解かせるとする
2. 未知データを入れると出力Y1が出る
3. 出力Y1を性能指標Pで測ることが出来る
4. 更に新しいデータを入力し出力Y2を出す
5. 性能指標Pにより測定した際、Y2がY1より改善されていた場合、このコンピュータープログラムは学習したと言える
![１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/d7e58d97-ba9c-4d48-56f5-a1983357c4a9.png)


# 線形回帰

* 線形とは？＝ざっくり「比例」
$$
e.g: \space 
y=Ax + B (2次元)\\\
z= Ax + By + C (3次元)
$$
* n次元空間における超平面
$$
\begin{align}
y &= a_0 + a_1x_1 + a_2x_2 + \cdots + a_{n-1}x_{n-1} \\\
&= a_0 + \sum_{i=1}^{n-1} a_ix_i \\\
&= \sum_{i=0}^{n-1} a_ix_i,where  \space  x_0 \equiv 1\\\
&= \boldsymbol{a}^T \boldsymbol{x} \space (n次元ベクトル)
\end{align}
$$

###回帰問題

* 説明変数(入力)
$$ \boldsymbol{x}=(x_1, x_2, ・・・,x_m)^T \in ℝ^m$$
* 目的変数(出力)
$$ y \in ℝ^1 (yは実数) $$

###線形回帰モデル

* 回帰問題を解くための機械学習モデルの一つ 
* 教師あり学習
* 入力とm次元パラメータの線型結合を出力するモデル
* 予測値にはハットを付ける（教師データのyと区別）
<br>
**教師データ**
$$ {(\boldsymbol{x_i}, y_i) ; i = 1, ... , n} $$
**パラメータ**（入力変数と同じ次元数）
$$ \boldsymbol{w} = (w_1, w_2, ... , w_m)^T \in ℝ^m $$
**線型結合**（未知のパラメータwと入力xの内積）
$$\hat{y} = \boldsymbol{w}^T \boldsymbol{x} + w_0 = \sum_{j = 1}^{m} w_jx_j + w_0 $$
* 目的: wの値を決定する

###線形結合
* 未知のパラメータwと入力xの内積の総和
* 切片w_0も足し合わせる(切片＝y軸との交点、y軸に向かって平行移動するような作用がある)
* 入力ベクトル$x_j$が多次元でも出力は１次元（スカラ）になる
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/70614079-0570-8208-73a4-4d44ec205a6a.png)


### モデルのパラメータ
* モデルに含まれる推定すべき未知のパラメータw
* 特徴量が予測値に対してどのように影響を与えるかを決定する重みの集合$w_j$
* 最良の勾配を最小二乗法により推定する<br>

####単回帰モデル
* 説明変数が１次元(m=1)
* データは回帰直線に誤差が加わり観測されていると仮定
* 偶発誤差かの見極め
 + y (来店者数) が$x_1$(気温) と $x_2$ (曜日) で決まると仮定する。
 + 気温だけで来店者数を予測しようとすると、曜日の情報は$\epsilon$(誤差)に乗る。
 + 誤差が大き過ぎる場合、説明変数が不足していると考察できる。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/723ee1fa-1b84-01f4-d3cf-61130834991d.png)
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/cb88313e-aa4c-2ee0-eb8b-517dc43681fe.png)
* 連立方程式をベクトルで表すと、
![4.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/710be410-8a3d-5b89-4c38-50c5778c58a2.png)
* 実装面において行列の shape の確認は重要

####重回帰モデル
* 説明変数が多次元(m>1)
* 単回帰は直線、重回帰は局面・超平面
* データは回帰局面に誤差が加わり観測されていると仮定
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/23a28d15-1a79-c846-8d13-9f36a9056716.png)
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/60c60a3e-0c7e-6706-067f-b7464b7d13c1.png)
![6.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/a4b3edcc-e027-bf0b-74dc-150d5125f348.png)
* 基本的にデータ数xよりパラメータ数wが多い問題は解き難い

### データの分割
* 目的：汎化性能を測る（未知データに対しての精度の良さ）
* 線形回帰モデル
 + 平均二乗誤差 (残差平方和)：データとモデルの二乗誤差の和
 + 最小二乗法
   - 学習データの平均二乗誤差を最小とするパラメータを探索する（勾配０＝最小）
 $$ MSE_{train} = \frac{1}{n_{train}} \sum_{i=1}^{n_{train}}(\hat{y_i}^{(train)} - y_i^{(train)})^2 $$
 ![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/3701b0a3-a37d-4c03-4946-b70facc38d10.png)
 + 二乗誤差を用いる際は、外れ値が無いことを確認する(外れ値に引っ張られて傾きが異常になる)
 + Huber損失、Tukey損失を用いれば外れ値に対してロバストなパラメータ推定ができる
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/1b629821-5507-a18b-aa93-db55cd3c33f5.png)
 + wの関数であり、予測値の中に求めるべき変数wは含まれることに注意
 + J(w)を最小化するwを求める
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/5eb01e38-8b75-0d29-b239-67ac8239d4c3.png)
 + $arg \space min \space MSE$は「MSEを最小化する入力」を求めろの意
 + 内積の形は$\Sigma$の形に直せる
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/2b31574d-21e2-c5f2-d6d2-b2bcdbc039e9.png)
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/d27a099a-6346-8c98-802d-933cbc1f094d.png)
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/e6621bc1-e6bf-7e1d-7e08-93ab62020a50.png)
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/1af183ae-0558-1b0b-35b6-4fa15d27029c.png)
 + 新たな入力Xに上で算出した回帰係数$\hat{w}$をかけると予測$\hat{y}$ができる
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/e9a8e4ff-7720-8998-1932-1d5a8d507d01.png)
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/a0778a7c-c2db-d46a-812d-8521c5f9afda.png)



## 非線形回帰モデル
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/94fbb83b-4215-39bb-574d-b84badc9c56e.png)
* パラメータwに関しては線形のまま
* 重みについて線形でも(linear-in-paarameter)、十分非線形な関数を表すことができる
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/865b4cba-7187-c0ed-ea9f-75b51da4d95c.png)


### 基底関数
* 基底展開法
 + 回帰関数として、基底関数と呼ばれる既知の非線形関数とパラメータベクトルの線型結合を使用
 + 未知パラメータは線形回帰モデルと同様に最小二乗法や最尤法により推定
 + xを一旦線形の写像$\phi$によって非線形化して、wとの内積を求める
$$ y_i = f(x_i) + \epsilon_i $$
$$ y_i = w_0 + \sum_{i=1}^{m}
w_i\phi_j(x_i) + \epsilon_i $$
 + 基底関数の例：多項式関数、ガウス型基底関数、（B）スプライン関数など
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/50c1c9af-b3ab-9ddb-a85e-7072354690df.png)
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/abb4c8e1-80ad-7481-8e9c-314e49315c4e.png)
 + ガウス型基底関数
   - exp(-x) はxが大きくなると指数関数的に小さい値を返す
   - xからの距離が近い方の山の値は大きく、遠い山は小さい値をとる
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/c23baa7f-68f9-5fcf-1a0f-4482987ffaf2.png)
![20.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/661654e1-98c4-73f8-8610-8e414b61b091.png)
   - 次元を大きくしてガウス型基底関数を増やすことができる
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/3a25470a-10d3-ee8f-da3f-1fe5364a6c19.png)
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/85c17a5a-ba3d-0151-e8e8-47caad67df5f.png)
   - X が $\Phi$空間に飛ばされた場合を考える
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/5413e3c7-4fba-e37d-3ecf-92c9529d8a00.png)


### １次元の基底関数に基づく非線形回帰
 + 多項式（１〜９次）<br>
   $$\phi_j = x^j$$<br>
 + ガウス型基底<br>
    $$ \phi(x) = exp{\frac{(x - \mu_j)^2}{2h_j}}$$
     - 正規分布の形なので、積分した時に１になる
     - 正規分布の平均の場所、ある山がどれくらい広がるかをバンド幅というパラメータによって規定される→２次元の基底関数に使える

### ２次元の基底関数に基づく非線形回帰
  + ２次元ガウス型基底関数
    $$\phi_j(x) = exp{\frac{(x - \mu_j)^T(x - \mu_j)}{2h_j}}$$
     -  基底関数をデータ空間上に配置可能

### 基底展開法
 + 説明変数
$$ x_i =(x_{i1}, x_{i2}, ・・・,x_{im}) \in ℝ^m $$
      説明変数を基底関数ベクトルに変換（xを、事前に用意されているK個の写像$\phi$で変換）して、、、
 + 非線形関数ベクトル（K次元特徴ベクトル）
$$ \phi(x_i) = (\phi_1(x_i), \phi_2(x_i), ・・・ , \phi_k(x_i))^T \in ℝ^k$$
      iがn個分（学習データ分）存在するので、写像を学習データにすればk次元のパラメータベクトルがn個出てくる。これにより計画行列が求められる
 + 計画行列
$$\Phi^{(train)} = (\phi(x_1), \phi(x_2), ・・・ , \phi(x_n))^T \in ℝ^{n*k} $$
      後は最尤法を使って予測値を求める
 + 予測値
$$\hat{y} = \Phi(\Phi^{(train)T}\Phi^{(train)})^ {-1}\Phi^{(train)T}y^{(train)}$$

### 過学習と未学習
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/36126508-af4b-42e8-5cc9-1e03d9408558.png)
* 未学習（underfitting）の対策
 + モデルの表現力が低いので、表現力の高いモデルに変える
* 過学習（overfitting）の対策
 + 学習データを増やす
 + 不要な基底関数（変数）を削除 (特徴量選択)
    - ドメイン知識やAIC(赤池情報量基準)など情報量基準などによるモデル選択が重要
 + 正則化 (wのコントロール)
    - 係数を小さくされた関数はほぼ無視される
    - ｗがあまりにも大きくなる場合に働く罰則項を加える
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/3bf98102-d316-3fde-b201-b495d492c54a.png)
![25.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/fc70eb6d-54a3-7d8b-86b0-4890ff93b4a8.png)

* 正則化について
 + 正則化法 (罰則化法)
   - 罰則を与えてモデルの複雑化を抑える
　$$ S\gamma = (y - \Phi w)^T(y - \Phi w) + \gamma R(w) $$
 + 正則化項Rの役割
   - R無し・・・最小二乗推定量
   - L2ノルム・・・Ridge推定量（○型、縮小推定）：パラメータに原点付近に制約を与え、制約の中でMSEを最小にする点を探す
   - L1ノルム・・・Lasso推定量（◇型、スパース推定）：MSEを最小化する接点はカドになる、いくつかのパラメータ（$w_i$）を正確に０に推定する。推定する段階で不要な基底・変数を排除できる（説明変数が多い場合、推定１回で予測に対する影響の小さい変数を０にしてくれることは役に立つ）
 + パラメータ$\gamma$ = 制約面の大きさ
   - $\gamma$を小さくする→制約面が大きくなる
   - $\gamma$を大きくする→制約面が小さくなる
 + どのように正則化項を入れるか
   - min MSE  s.t. $R(\boldsymbol{w} \leq \gamma)$
   - 不等式条件のついた最適化。KKT条件を用いると min MSE + $\lambda R(\boldsymbol{w}) $ となり、MSEに第二項をつけることで不等号条件を回避できる
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/f68bd075-a8bd-f6f5-1df5-096c33d1f5d6.png)
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/f2cad853-ecbf-9742-aee7-52d2df059c3e.png)
* 適切なモデルの選定
 + ホールドアウト法
   - データが大量にないと、良い性能評価を与えない (データが少ないと外れ値が検証データに含みやすい＝外れ値にフィットするモデルになってしまう)
 + クロスバリデーション（交差検証法）
   - イテレータ毎に学習用・評価用に分割
   - CV値（精度の平均）がホールドアウトで検証したモデルより低くても、汎化性能が高いとは限らない
   - 精度の計算は二乗誤差 (原則は学習と検証は同じ損失関数)
   - 実務において、精度は検証データ(手元にないデータ)で測ったものを報告する

* ハイパーパラメータ調整法
 + グリッドサーチ
   - ハイパーパラメータの組み合わせの候補を予め用意しておいて、組み合わせ毎に確かめておく
 + Bayesian Oplimization (ベイズ最適化)
   - ニューラルネットワークで使うパラメータ調整
![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/3bd523a2-2aab-4e7f-9f41-273f8a61dff5.png)



## ロジスティック回帰

### データ形式
* 分類問題 (クラス分類)
 + 説明変数(入力)
$$ x=(x_1, x_2, ・・・,x_m)^T \in ℝ^m$$
 + 目的変数(出力)![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/02189d46-7fec-7bae-be0d-53e36cb64125.png)

$$ y \in \{0, 1\}$$
* 識別的アプローチ：
 + $ P(C_k | \boldsymbol{x}) $ を直接モデル化
 + 識別的アプローチのメリット
    - xが与えられた時クラスkに割り当てられる確率がわかる
    - 確率で与えられるので判断を保留できる
* 生成的アプローチ：
 + $P(C_k)$ と $P(\boldsymbol{x} | C_k)$をモデル化し、その後ベイズの定理を用いて$P(C_k | \boldsymbol
{x})$ を求める
 + 生成的アプローチのメリット：外れ値の検出ができる

### ロジスティック回帰モデル
![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/fce3ad41-6652-949e-e3f2-ce1d042c9c64.png)
* ロジスティック線形回帰モデル
 + 欲しい出力 y は{0, 1}
 + 実数全体をとる$\boldsymbol{x}^T \boldsymbol{w}$を、{0, 1}に潰す関数を利用
 + 入力とm次元パラメータの線型結合を、シグモイド関数に出力
 + 出力はy=1になる確率の値になる

* シグモイド関数

 * シグモイド関数の性質
     + シグモイド関数の微分は、シグモイド関数自身で表現できる
     + モデルのパラメータ推定においては、MSEや尤度などの基準を最小・最大にする点を求める必要がある→微分が簡便にできることは有利
$$ 
\begin{align}
\frac{\partial\sigma(x)}{\partial x} 
&= \frac{\partial}{\partial x} \biggl(\frac{1}{1 + exp(-ax)}\biggr) \\\ 
&= (-1)・\{1 + exp(-ax)\}^{-2}・exp(-ax)・(-a) \\\ 
&= \frac{a・exp(-ax)}{ \{1 + exp(-ax)\}^2} 
= \frac{a}{ 1 + exp(-ax)} ・ \frac{1 + exp(-ax) - 1}{ 1 + exp(-ax)} \\\
&= a \sigma (x)(1 - \sigma(x)) 
\end{align}
$$
![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/5b176ebb-9b47-8502-a0a3-26fa01a02593.png)
![31.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/02b461ab-1912-7b45-b29c-2eb1b615aabb.png)
 + 求めたい値
$$ P(Y = 1|x) = \sigma(w_0 + w_1x_1 + \cdots + w_mx_m) $$
   - 線型結合のwxのみでは分類の出力としては不味いので、シグモイド関数$\sigma$をかませて0~1の出力に直している
![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/edc331f3-4ffd-5a42-7be8-038cbf922d8f.png)


### パラメータ推定
* ベルヌーイ分布
![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/e9fb2e77-3800-43d5-6b4e-4e6e52ca9b9f.png)
 + 正規分布、一様分布など、様々な分布モデルの内の一つ
 + ロジスティック回帰モデルではこれを利用
 + 離散確率分布（確率p → 1, 確率1 - p → 0）
$$P(y)=p^y(1-p)^{1-y}$$
* 最尤推定（データから尤もらしいPは何か、を推定する）
 + 同時確率
   - それぞれの確率変数が独立→確率同士の掛算
* 尤度関数
 + データは固定し、パラメータを変化させる
 + 尤度（likelihood）＝ 対象となる集団$\mu$から特定のサンプル$x_k$を取り出してくる確率
 + 確率の対数をとったもの＝尤度関数
 + 尤度関数を最大化するようなパラメータを選ぶことを尤度推定という
![34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/111b5408-08b3-4e41-d428-9d9b6529901e.png)
* ロジスティック回帰モデルの最尤推定
 + 線型結合をシグモイド関数を通した確率Pを使って、尤もらしいパラメータwを求める
![35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/8b2a3f9f-26a8-eef0-0a00-bb2b6305011b.png)
![36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/94f345a7-a5aa-8fe0-845f-a9c5f232c40d.png)
 + 尤度関数Lを最大化するパラメータを探索
![37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/32ce1f5c-d7dd-ffe6-6d17-c9fa8b93f845.png)
 + 実用上重要：尤度関数Lは確率Pの積集合。つまり０〜１の値を掛け合わせたものなので、予め対数をとっておくことで桁落ちを防げる。

* 勾配降下法
 + 反復学習によりパラメータの逐次的更新を行うアプローチの一つ
 + $\eta$は学習率と呼ばれるハイパーパラメータで、モデルのパラメータの収束し易さを調整
 + 勾配降下法のメリット：
   - 線形回帰モデル (最小二乗法)：MSEのパラメータに関する微分を解析的に求めることができる
   - ロジスティック回帰モデル (最尤法)：対数尤度関数をパラメータで微分して０になる値を求める必要があるのだが、解析的にこの値を求めるのは困難
$$w(k+1) = w^{k} - \eta \frac{\partial E(w)}{\partial w}$$
![38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/f133743b-f380-96e3-fba6-fb5a8c6b4bf7.png)
![39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/5c8d89ce-ecdd-6e98-4ce2-c9e492611269.png)
![39.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/e46352bf-b7c7-eca0-da2c-bb412c599256.png)
 + Eをwで微分する前にPが出てくるのでPで微分 → Pはシグモイド関数なのでzで微分 → zはwとxの線型結合なのでwで微分
 + パラメータが更新されなくなった場合、それは勾配が０になったということ。少なくとも反復学習で探索した範囲は最適な解が得られたということ
 $$w^{(k+1) = w^{(k)} + \eta \sum_{i=1}^{n}(y_i - p_i)x_i}$$
 + 勾配降下法のデメリット：
   - 勾配降下法ではパラメータ更新にN個全てのデータに対する和を求める必要がある → メモリ不足、計算時間が膨大になる等の問題がある → SGDを利用
* 確率的勾配降下法 (SGD)
 + データを一つずつランダムに（確率的に）選んでパラメータを更新
 + 勾配降下法でパラメータを１回更新するのと同じ計算量でパラメータをn回更新できるので効率よく最適解を探索可能
 + パラメータの更新がある程度不規則になり（勾配降下法に比べて）初期値に近い局所最適解に陥りにくい（ロジスティック回帰では山が一つなのであまり関係無い）
 $$w(k+1) = w^k + \eta (y_i - p_i)x_i$$
![40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/f0255b5c-48bd-a24f-a524-99b43ce5bb4c.png)


### モデル評価
* 混同行列(confusion matrix)
 + 各検証データに対するモデルの予測結果を４つの観点(表)で分類し、それぞれに当てはまる予測結果の個数をまとめた表
![41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/d3d35f9b-c0d6-7053-66c0-38e5365e20b1.png)
* 分類の評価方法
 + 「正解率」がよく使われる
 + 正解した数 / 予測対象となった全データ数
 + 問題：分類したいクラスにそれぞれ偏りがあることが多い
$$\frac {TP+TN}{TP+FN+FP+TN}$$
![42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/223185ff-78ec-c5ca-098a-28f01d1ece9a.png)
* 再現率（Recall）
     + 「本当にPositiveなもの」の中からPositiveと予測できる割合
     + 例：病気の検診（見落としはNG）
$$\frac{TP}{TP+FN}$$ 
![43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/5fff5be5-d394-4d10-72b8-571594d35401.png)
 * 適合率（Precision）
     + モデルがPositiveと予測したものの中で「本当にPositive」である割合
     + スパムメール（見落としは多少あってもいい）
$$\frac{TP}{TP+FP}$$ 
![44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/5b1fdd3f-5392-b3bf-44cb-92e08bca5b53.png)
 * F値
     + Recall と Precision の調和平均
     + 高ければ高いほど、Recall と Precision の値も高くなる
     

## 主成分分析 (PCA)
### 次元圧縮
* 多変量データの持つ構造を、より少数個の指標に圧縮
 + 情報の損失はなるべく抑えたい
 + 少数変数（２・３次元程度）で分析や可視化が可能
 + 学習データ
$$ x=(x_1, x_2, ・・・,x_m)^T \in ℝ^m$$
 + 平均（ベクトル）
$$ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i $$
 + データ行列
$$ \bar{X} = (x_1 - \bar x, ... , x_n - \bar x)^T  \\ (原点周りで分散するように中心化してやる) $$
 + 分散共分散行列
$$ \sum = Var(\bar{X}) = \frac1n \bar{X}^T \bar{X}$$
 + 線形変換後のベクトル
$$ s_j = (s_{1j}, ... , s_{nj})^T = \bar{X}a_j,  \space (a_j \in ℝ^m) $$
     + (n個のデータの未知パラメータwを、共通のaで変換したもの→s) 
     + (jは変換先の次元数 ３次元→ 1 or 2 次元など、軸のインデックス） 
* 変換後のデータ$s_j$の分散を最大化することで情報の損失を抑えることができる
* 次元圧縮の目的：線形変換後の変数の分散が最大になるような写像軸を探索する
![45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/c076accc-2efa-0f55-478f-efa6f3f94874.png)

### 制約付き最適化問題
![46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/ae262c07-110e-a147-31ef-d3add28bf94c.png)
![47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/817a8587-78a5-35b1-5acc-feb3b6b4a688.png)
![48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/18fcb343-eb73-0610-d165-59b1a77ab667.png)



## K近傍法 (KNN)
![49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/d5f20df4-b716-6894-f261-e97f76c5be70.png)
![49.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/a886cf75-d9c7-2149-1bbc-c3013d351898.png)
![49.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/febd08c2-2225-7f8b-6d70-79caab7a7ffc.png)


## K-平均法 (k-means)
* アルゴリズム：
 1. クラスタ中心の初期値を設定
 2. 各データ点に対して、各クラスタ中心との距離を計算し、最も距離が近いクラスタを割り当てる 
 3. 各クラスタの平均ベクトル（中心）を計算する
 4. 収束するまで2,3の処理を繰り返す
   - 初期値が近いと上手くクラスタリングできない点に注意
   - kの値により結果も変わる→kの値の設定が肝
![50.0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/4251b41d-8593-5fb3-fbf0-767e43c84f13.png)
![50.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/89592f60-03eb-bf8e-c20b-2ceeb326a6d4.png)
![50.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/f49c9c88-b5c4-a3fb-5ad6-0eb7a2925016.png)
![50.3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/45d43043-7e39-a86d-af64-641fa00d5e71.png)


## サポートベクターマシン
### 概要
 * サポートベクトルマシン(SVM)は、主に２クラス分類に用いられるアルゴリズムである。SVMは、ロジスティック回帰とは異なり、データとのマージンが最大となる識別面を学習によって獲得する。このとき、識別面を構成するために使われるデータをサポートベクトルと呼ぶ。マージン最大化は、ある学習について不等式制約のもとでの最適化問題を解くことで得られるが、その学習データが線形分離不可能な場合、全ての制約を満たす解を得ることができない。そこで、スラック変数を導入することで、誤りをある程度許容しつつ、マージンを大きくとった識別面を得ることができる。このようなスラック変数を導入したSVMはソフトマージンSVMと呼ばれる。

### SVMの適用範囲
* 線形モデルの正負で２値分類
$$ y = \boldsymbol{w}^T \boldsymbol{x} + b = \sum_{j=1}^{m} w_j x_j + b $$
* 線形分離の決定境界は無数に考えられる
 + マージンにより決定
 + マージン：線形判別関数$\boldsymbol{w}^T \boldsymbol{x} + b = 0$と最も近いデータ点との距離
![51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/d39dc575-f7e2-914d-12cd-e216b4a63458.png)
![52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/1afbec74-bce5-8241-28a6-29923bc967ab.png)
* 弱点：計算コストが大きく大規模なデータセットには向かない
* 決定境界
 + ２次元：１つの直線で分割
 + n次元：n-1次元の超平面（分離超平面）で分割
    - この分離超平面に最も近いデータをサポートベクトルと呼ぶ

### 目的関数の導出
![53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/44b10a85-17d5-019f-e8e7-d573f593d440.png)
![53.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/6cea68ec-9d79-0734-8407-e088bfcc64f7.png)
![53.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/0d1d860c-2061-d4ce-4b68-2f1b5730f507.png)
![53.3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/816981/21605a4e-d99d-39c3-fae1-c0366f5c84a1.png)


### 主問題と双対問題
* SVMの主問題
 + 主問題の目的関数と制約条件
 $$min_{w, b} \frac12 ||\boldsymbol{w}||^2 \\\
 t_i(\boldsymbol{w}^T \boldsymbol{x}_i + b) \geq 1 \space (i = 1, 2, \cdots , n) $$
   - 上の最適化問題をラグランジュ未定乗数法で解くことを考える
   - 最適化問題は多くの場合、主問題を直接解かずにこれを双対問題と呼ばれる別の形の数式に変換して、その数式を解くことで最適化問題を解く、ということをする
  
* ラグランジュ未定乗数法とは
 + 制約付き最適化問題を解くための手法
 + 制約$g_i(x) \geq 0 (i = 1, 2, \cdots, n)$のもとでf(x)が最小となるxは、変数$\lambda \geq 0 (i = 1, 2, \cdots, n)$を用いて新たに定義したラグランジュ関数を満たす

* 双対問題
 +  SVMのソフトマージンの式にラグランジュ未定乗数法を適用し、双対問題の式を導出する

### カーネルトリック
* 元の特徴空間では線形分離不可能な時、SVMは上手く動作しないことがある。そこで、特徴量をより高次元の空間に写像することで、線形分離を可能にするアプローチを考える。特徴量に対する変換関数を$\phi(x)$とした時、目的変数yを表現するモデルは$ y = w^T \phi(x) + b $と書くことができる。
この場合、写像先の空間が高次元であるほどパラメータの数が増えてしまう。そこで、問題設定を工夫することでパラメータを減らし、データ間の内積を用いて目的変数を表現するモデルを構成することができる。その代わり、写像先の空間が高次元であるほど写像したデータ同士の内積計算$\phi(x)T \phi(x')$に計算コストを要してしまう。だが実は、関数$\phi$によっては、写像先の空間における内積$\phi(x)T \phi(x')$を元の空間における関数 k(x, x') の計算によって得ることができる。これをカーネルトリックと呼ぶ。関数 k(x, x') には、動径基底関数$ k(x, x') = exp \Bigl( - \frac{|| x - x' ||^2}{\beta} \Bigr)$などがよく用いられる。


## 演習結果と考察

 ### skl_regression
* 演習結果<br>
https://sklregression.s3-ap-northeast-1.amazonaws.com/skl_regression.html

* 考察
 + 外挿問題により使用しない方がいい特徴量があることが確認できた。

* 課題
 + 部屋数が ４ で犯罪率が 0.3 の物件はいくらになるか？

```
4240.08ドル
```

### skl_logistic_regression
* 演習結果<br>
https://skllogireg.s3-ap-northeast-1.amazonaws.com/skl_logistic_regression.html

* 考察
 + sk_learnなど用いると便利だが、裏でどういう処理が行われているか（モデルの初期値など）を把握することが重要だと認識した

* 課題
 + 年齢が30歳で男の乗客は生き残れるか？

 ```
演習コード内
model3予測結果により、
Survived==0 : 生き残れる
 ```

### skl_pca
* 演習結果<br>
https://sklpca.s3-ap-northeast-1.amazonaws.com/skl_pca.html

* 考察
 + 次元圧縮を行うとある程度決定境界が曖昧になるが、可視化できるメリットがある

* 課題
 + 32次元のデータを2次元上に次元圧縮した際に、うまく判別できるかを確認

 ```
 演習コード参照
 ```

### skl_kmeans
* 演習結果<br>
https://sklkmean.s3-ap-northeast-1.amazonaws.com/skl_kmeans.html


### np_svm
* 演習結果<br>
https://npsvm.s3-ap-northeast-1.amazonaws.com/np_svm.html