【ラビットチャレンジ】【機械学習】主成分分析

「ラビットチャレンジ」 提出レポート
##１．主成分分析とは

> 主成分分析（しゅせいぶんぶんせき、英: principal component analysis; PCA）とは、相関のある多数の変数から相関のない少数で全体のばらつきを最もよく表す主成分と呼ばれる変数を合成する多変量解析の一手法。データの次元を削減するために用いられる。
（引用：Wikipedia）

■　変量の個数を減らすことに伴う、情報の損失はなるべく小さくする必要がある。

##２．主成分
■　係数ベクトルが変われば、線形変換後の値が変化する
■　主成分を見つけるためには、線形変換後の変数の分散が最大となる射影軸を探索する。
■　制約つき最適化問題の解き方について、ラグランジュラグランジュ関数を最大にする係数ベクトルを探索する（微分して０になる点）。
■　射影先の分散は固有値と一致すること。
■　元データの総分散は固有値の総計に一致すること。
##３．寄与率と累積寄与率
■　**寄与率：** 第 $k$ 主成分の寄与率は第 $k$ 主成分の分散の全分散に対する割合
■　**累積寄与率：** 第 $1-k$ 主成分まで圧縮した際の情報損失量の割合
##４．ハンズオン
###【実装演習結果】
**設定：**
　●　乳がん検査データを利用してロジスティクス回帰モデルを作成
　●　主成分を利用し2次元空間上に次元圧縮
■　**必要モジュールとデータのインポート**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/942bc693-37ae-4f38-e2d8-8548bc443230.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/a2e4d389-6782-919c-7988-56e81ca3c8e4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/76161583-38cf-c28e-5a6e-e5423259933e.png)
■　**ロジスティック回帰で学習**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/fca71369-7473-26b1-78d8-889a8579dfb0.png)

```html:"TrainingScore&TestScore"
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
Train score: 0.988
Test score: 0.972
Confustion matrix:
[[89  1]
 [ 3 50]]
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:947: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)
```
**【結果】**ロジスティック回帰より、検証スコア97%で分類できることを確認
■　**主成分分析より次元圧縮**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/605c1278-c050-22a3-7d8c-dfcb612caf54.png)
元データの３０次元から2次元に圧縮
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/a8c8b7e5-7fd2-ed3b-2f49-4c2ba430ab9a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/ab9e7e44-78f3-b60f-b4fd-4a1b0bf5d035.png)
###【考察】
主成分分析を利用して元のデータ（30次元）を2次元に圧縮することができた。圧縮後の2次元に対して、ロジスティック回帰を適用し、検証スコアを確認してみた。
**テストデータにも2次元に圧縮する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/6d31a2dd-bf29-5dde-4335-8d2c83a02d8d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/ac83916b-150d-5d24-9d73-f4c59fbd012f.png)
**ロジスティクス回帰を適用する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552833/7654350e-3249-9052-8ad5-d59bd947c7bd.png)

**【考察】**上の結果を見ると、次元数を２に下げても、診断結果 (良性がB / 悪性がM) の分類はできたと見えます。ロジスティック回帰（データの次元数：３０）と比べて、検証スコアが減るということが分かる（97.2→91.6）。

##【機械学習】レポート一覧
[【ラビットチャレンジ】【機械学習】線形回帰モデル](https://qiita.com/HienDT27/items/0cbed5d1771b13d0311c)
[【ラビットチャレンジ】【機械学習】非線形回帰モデル](https://qiita.com/HienDT27/items/0f785e4835a85a8cd4ad)
[【ラビットチャレンジ】【機械学習】ロジスティク回帰モデル](https://qiita.com/HienDT27/items/cd067099c970a9786a47)
[【ラビットチャレンジ】【機械学習】アルゴリズム](https://qiita.com/HienDT27/items/4731d66f31e0d247caeb)
[【ラビットチャレンジ】【機械学習】サポートベクターマシン](https://qiita.com/HienDT27/items/aa7317a8394212940068)