ラビットチャレンジ 機械学習講座

# 採点範囲
下記赤枠で囲った部分が採点範囲となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/ce5943f5-7bee-9942-b996-6834395f4982.png)


# 線形回帰モデル
## 要点のまとめ
### 線形回帰モデル
与えられた教師データ{$(x, y) \in \mathbb{R}^N\times\mathbb{R}$}を線形で予測する
$\hat{y}=f(x) = \omega^Tx+w_0$なる線形写像$f$を求める。
※予測値は慣例的に$\hat{y}$のようにハットをつける。
与えられた教師データの誤差の二乗が最小となる$\omega$を最小二乗法により求める。
すなわち、下記を最小とする$\omega$を求める。
$MSE_{train}=\frac{1}{n}\sum{(f(x) - y)^2}=\sum{(w_i x_i^j + w_0 - y^j)^2}$
本関数は上に凸のため、$\frac{MSE_{train}}{\partial\omega} = 0$なる$\omega$を解析的に解けば良い。
$\omega=(X^TX)^{-1}X^Ty$
ただし、$X=(x^{(1)}, y^{(2)},...,x^{(n)})$、$y=(y^{(1)}, y^{(2)}, ..., y^{(n)})$は教師データ。

### 訓練データと検証データ
モデルが正しいかどうかを検証するために、与えられたデータを訓練データと検証データにわける。
訓練データによりモデルを構築し、検証データにより、モデルがどの程度の精度を出しているかを検証する。

## 演習問題実施結果キャプチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/84671666-f5af-9ace-4818-bd7939da1171.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/7122614c-0fa4-f8a5-64b4-1bc7ea058da3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/133620b3-0bd3-4558-0be6-2eca71cd9016.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/2c579ab4-10e9-395f-3345-9b5f8d09356a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/82d2a7d0-0634-96fd-c121-b6a3ba130202.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/c5a76085-6e14-b546-f225-a786c51afd11.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/37c4cd76-004b-5898-1603-799b940bc5bc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f97b6b70-ebb8-a7ff-1e65-01c17ed80e99.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/be0ed62e-d47f-7caf-e7e1-3dada7657043.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/db70a85f-df74-2220-7ffe-9da3bf02aac3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/c0b2fdf8-c637-418c-7b64-2ef7d20a2818.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/965cefdb-c447-8ea5-a2de-178e546ca420.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/27970518-9514-1652-ae04-d07e3dc87fdf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/1007deba-210b-cd73-f3fc-0e59f2a9a66b.png)

## 関連記事レポート
### 演習課題
ボストンデータを用いて、犯罪率0.3、部屋数4の場合の家賃を線形回帰を用いて算出した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/abce6906-9569-a134-4432-448bc9a287cf.png)

#非線形回帰モデル
## 要点のまとめ
###非線形回帰
非線形回帰モデルも、線形回帰モデルの方法に帰着させる。
説明変数 : $x_i = (x^{(i)}_1,...,x^{(i)}_m) \in \mathbb{R}^m$
非線形関数 : $\phi(x_i)$
非線形関数の計画行列 : $T = (\phi(x_1), ..., \phi(x_n))^T \in \mathbb{R}^{n \times k}$
最尤法による予測値 : $ \hat{y} = T(T^TT)^{-1}T^Ty$

###未学習と過学習
未学習はモデルの表現力が低いため、表現力の高いモデルを利用する
過学習は、学習データを増やす、表現力を抑止、正則化による表現力の抑止
### 正則化法
$S_\gamma = (y - \phi\omega)^T(y-\phi\omega) + \gamma R(\omega)$
$minMSE s.t. R(\omega) \leq r$を解く。ラグランジュの未定乗数法(KKT条件)。
L2ノルムを利用するもの： Ridge推定量
L1ノルムを利用するもの: Lasso推定量

###検証
ホールドアウト法：有限のデータを学習用とテスト用に分ける。
クロスバリデーション：有限のデータをN分割し、そのうちの一つを検証用にする。検証用データを変えながら学習を繰り返していく。

###ハイパーパラーメータの調整
グリッドサーチによりパラメータを調整する。

## 演習問題実施結果キャプチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/3a608fb2-b1fc-f315-a903-8ccb8e202263.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/93abed28-d06b-b06f-1c8c-198f9d573daa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/82795831-702a-6e3c-0eef-b66d160a06d1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/e79fa909-bca4-2981-41cd-74b83d97eaaf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/beeb163e-fe1e-ec6a-9557-c1cb21bc47c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/2889be53-d17f-dcf7-0b4e-402b0d475423.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f154ab3d-1a85-f269-ca72-5324e27de639.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/50f7f61d-b686-ece8-ce15-0b4fae2639d9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/e668d9e9-8d6d-0bba-1902-eaef2bfa7450.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/01a504ed-489d-d2ba-02a9-1512ca1ee5cd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/fdb9df18-0ed5-0a52-c385-4387d95c9ca3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/6f81bd3e-0e66-984e-2176-ff4b4ccdaa5a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/23b5aa5c-b137-a7f1-8373-c69fafcd14c8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/5b8b70b3-647b-28db-ed3e-2980d112111c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/6b51fa99-7ee3-ec9a-63b0-7ef177471529.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/e4acb809-12e9-c63e-a80b-bcda9d6bc572.png)

#ロジスティック回帰モデル
## 要点のまとめ
### 分類問題
分類問題とは、教師データ{$(x_i, y_i); i = 1,...,n$}ある入力からクラスに分類する問題を表す。
入力：$v \in \mathbb{R}^m$
出力: 0 or 1
### 識別的アプローチと生成的アプローチ
識別的アプローチ：$p(c_k|x)$を求めるアプローチ。
生成的アプローチ：$p(c|c_k)をもとめるアプローチ。
### ロジスティック線形回帰モデル
$y = \sigma(\omega x + b)$
シグモイド関数$\sigma(x) = \frac{1}{1 + e^-x}$
この場合に、最尤推定で$\omega$を求める。
$L(\omega)=\prod \sigma(\omega^Tx_i)^y_i(1-\sigma(\omega^Tx_i))^{1-y_i}$
を最大化する$\omega$を求める。ただし、数値計算で解く場合は、値が小さくなり不都合なので、
$E(\omega) = -\log(L(\omega)) = \sum{y_i \log(p_i) + (1-y_i)\log(1-p_i)}$の最小値を
勾配降下法で数値解析的にで求める。
$w_{k+1} = w_k - \eta \frac{\partial E(\omega)}{\partial \omega}$
$\frac{\partial E(\omega)}{\partial \omega} = -\sum{(y_i-p_i)x_i}$

勾配降下法は全データを用いるためメモリに乗らないことがある。
そのため、確率的勾配降下法で、一部のデータをランダムに取得し、$\omega$を更新していく。

## 演習問題実施結果キャプチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/46c5b623-0c21-03db-8435-35c5fc5ca7eb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/984c68e6-20ec-a5fb-48d7-435d9f570b85.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/0db52529-99d7-0fb2-e4f6-268a608fd836.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/e557898d-dc01-9ddb-5735-7f09beb2e16c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/09bdef7b-c596-10d7-1b66-186c8fe95adf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/5991b702-a511-e0ad-669f-b09bdcecaed1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/ccedac90-2aa8-57db-1336-53c9c6a4d21c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f972fbde-0e13-31aa-48d8-972b14e360b4.png)

## 関連記事レポート
### ハンズオン
タイタニック問題。年齢、運賃、性別で予測した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/7535628f-3f5c-b3dc-b94b-465f4cfac04d.png)
一つサンプルして、正しく予想するか見た。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/cfaa5936-ef72-0efd-cd3f-f15fbd83323c.png)

#主成分分析
## 要点のまとめ
多変量データの持つ構造をより少数個の指標に圧縮する。
学習データ:$x_i=(x_{i1},...,x_{in})$
平均:$\bar{x}=\sum{\frac{x_i}{m}}$
データ行列:$\bar{X}=(x_1-\bar{x},...,x_n-\bar{x})$
分散共分散行列:$Var(X)=\frac{1}{n}\bar{X}^T\bar{X}$

この時に、$argmax(a_j^TVar(\bar{X})a_j)$を制約条件$a_j^Ta_j=1$の条件下で求めると主成分分析ができる。
解は固有値、固有ベクトルで求まる。固有値が大きいほど、寄与率が高いので、固有値が小さいものを削減することで、
情報量をあまり失わずに次元を削減できる。
例えば変数のデータがあり、それらが相関関係にある場合に、主成分分析し次元を落とすことで、
相関関係を無くしたうえでデータ分析が可能となる。

## 演習問題実施結果キャプチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/40a392e9-460d-e9ed-a86f-7a547f41475f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/6a0cdfe1-d122-d922-5332-220da47b8028.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/826d06ce-52d1-f5d1-7d68-f69e8d7154b8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/8ca9068c-9097-90e1-ab6a-2474e7998993.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f54854e7-48c9-6aea-0db1-7e2b526698a2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/98728ec8-be2e-da4f-9b6d-74caa38e9439.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/addea8bf-a295-d483-de10-42f4db82aeba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/159964d7-ae7b-0e1b-a841-8df9449c31c5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/6aea35ce-333b-a05a-4ebf-04759eab9436.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f88737bd-10a4-428d-6664-cb94e7acdf4d.png)

## 関連記事レポート
### ハンズオン
#アルゴリズム
## 要点のまとめ
### k近傍法
k近傍法とは、クラス$C$、教師データ${(x_i, y_i) \in \mathbb{R}^n \times C}$が与えられたとき、
ある点$x \in \mathbb{R}^n$が所属するクラス$c \in C$を定義する手法。
具体的には、ある点$x \in \mathbb{R}^n$がどのクラス分類かを定義するときに、
自分自身から最も近い点を順にk個選び、最頻のクラス$c in C$を$x$のクラス分類とする手法を指す。
### k-means
k-meansとは、データ${x_i \in  \mathbb{R}^n | i = 1,...,m}が与えられたときに、そのデータを
k個に分類する手法を指す。教師データが不要なため、教師無し学習である。
具体的には、下記のアルゴリズムでk個に分類する。
(0) 初期値として、点$c_i \in {c_i|i = 1,...,k}$を選ぶ。
(1) 与えられたデータ$x_j$に最も近い$c_i$の点を選び、最も近い点が$c_i$の$x_j$を同じ分類とする。
　　⇒これにより、分類(=クラスタ)がk個できる。
(2) $c_i$を、同じクラスタに所属する$x_j$の平均値とする。
(3) クラスタに所属する点が前回と変わっていた場合、(1)からやり直す。

## 演習問題実施結果キャプチャ
### k近傍法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/15708b8d-ac64-ac0d-580b-2699b82badb1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/d82a7744-7e37-6f19-70ba-b3147c139f9d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/ae90caf6-47e3-c651-090c-ef294a7093e0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/d14cfbab-d591-e02f-6bd5-54dbe94d4cbb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/b7d26705-7570-495b-8d7e-f3d7e7a1e7d8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/8397a92f-0d9c-4f06-
fe14-3a72d4774c74.png)

### K-Means
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/82c4080e-96d9-99c2-6ff9-59b9f7727ba7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f025d84f-21ba-551a-4218-b2ac72ed3170.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/2ffdadb9-b5b6-c291-813b-cfce0f1f90e6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/a211e429-3c6c-2d24-2231-a2eb54800d42.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/d79c9d3a-4ac6-051f-1a05-fd41ff351ad7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/8bbfada5-c2ba-00d8-b59c-822eb746d30b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/9d9981ab-ecc6-6b4d-fd55-c6d8b4e6d8ce.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/bc157f5a-7c16-87cf-21bf-671067947ce9.png)

#サポートベクターマシン
## 要点のまとめ
サポートベクターマシン(SVM)は、$x \in \mathbb{R}^k$の点が与えられたとき、二値分類$c \in (0, 1)$
するための手法。
$y(x)=\omega x + b$で$y(x)>0$と$y(x) <0$で分類する。
$\omega, b$は、与えられた教師データを、二値分類のグループで綺麗に分かれるよう超平面で分離し、
その超平面のマージンが最大となるような超平面を求め、$\omega, b$を解く。
ソフトサポートベクターマシンは、誤差があり、教師データがうまく線形分離できない場合に用いる。
そのような場合でも、誤差を許容したうえで、できる限り教師データを分離するような超平面を求める
ことで、二値分類するような関数を求めることができる。
そもそもデータが線形分離できない（線形でない）場合は、アイデアとしては、関数$\Phi$を教師データ
に適用し、線形空間にマッピングすることで非線形分離を求める。
カーネルトリックと呼ばれる手法で解く。すなわち、$\Phi(x)$を直接求めるのではなく、内積値
$K\Phi(x),\Phi(y)>$を求めることで、非線形分離するSVＭの関数を求める。
## 演習問題実施結果キャプチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/89909a36-dd4a-a3ca-c504-38161be36cb3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f05389e8-4d14-a2e3-6820-da4fd92314e4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/9b320daf-e502-8d5e-bc0a-b3007bdaec90.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/b1413994-72b2-3ea9-92a3-8b0c1678a006.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/3fe6a117-44da-2238-a462-fbc36503c176.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/2fafe46e-65e7-bc47-716d-48c63723e818.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/7aa0cc1f-1a2b-d07b-d45e-a2a57bd44196.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/5a7e062c-4135-1e91-4d13-de533c5833c3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/c6952cbb-251e-a325-3d1f-8932ef84b4a2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/6832cf4c-5ddc-a919-8a12-c0b9d66e5b05.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/50be265e-a839-927c-e346-5438c6da0189.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/f36bc52d-7eba-5ac1-4501-05d476b5b9f9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/a656d792-e603-2b84-c426-47d92259e8e7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/4fcd106e-a46f-6267-075d-89fe33e87ef1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/69265482-f2a4-050c-9842-6ecb46f875f9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/cad39713-9192-daa3-713e-b548bdff798a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137906/ea4849e4-b83e-db9e-16de-98facd53f481.png)
## 関連記事レポート
### 多クラス分類
SVMを用いて多クラス分類は可能。クラス分SVMの関数を用意し、
それぞれ、あるクラスかそれ以外かを判定するSVMを学習させることで、多クラス分類が可能となる。