Pythonではじめる機械学習　レポート③

# 3章 教師なし学習と前処理
## 教師なし学習の難しさ
　教師なし学習では、アルゴリズムに何を正解とするかを「教える」方法がないので、
アルゴリズムを評価するには、人間が結果を確かめる必要がある。

　教師なし学習は単体で運用するよりも、
教師あり学習の前処理段階で使われることが多い。

## さまざまな前処理
### StandardScaler
 原点から離れた距離にあるデータ群を原点の近くに移動させるために
StandardScalerを使う。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/c283992f-42bb-1560-66d1-cbf998926a7d.png)

### RobustScaler
　StandardScalerだと、原点から極端に離れたデータは原点から遠いままである。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/14d7a1f1-56ad-87b2-e366-7d20bc938c98.png)

　なるべく原点に近づけるように全体を縮小するのがRobustScalerである。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/c873a688-fab3-4fee-7c35-a7fcf342516c.png)

### MinMaxScaler
　RobustScalerの場合、全体を縮小しても外れ値が存在する。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/c873a688-fab3-4fee-7c35-a7fcf342516c.png)

　外れ値が出ないように、すべてを半径1の円に収めるように変換するのが
MinMaxScalerである。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/1f3031f0-f874-1ed7-ec27-1935cdd8e76b.png)

### Normalizer
　データをベクトルとして見た際に、
長さではなく角度のみを見る時にNormalizerを使う。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/a9b33d83-a147-10f4-5442-f3fb3d5fa50b.png)

## 次元削減、特徴量抽出、多様体学習
### 主成分分析(PCA)
　PCA(Principal Component Analysis)とは、
早い話が回転である。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/d7587148-1791-2e52-6ed7-8a10ebf467e1.png)

　特徴量1と特徴量2が互いに直交しているデータを回転し、
主となる特徴量1のみを見るために、特徴量2の成分をそぎ落とす。

### 非負値行列因子分解(NMF)
　NMF(Non-negative Matrix Factorization)は、
すべてのデータの総和を計算することによって
原点からデータのある方向のベクトルを算出するため、
マイナスが含まれるデータに対しては使えない。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/6c068550-c930-087e-eb02-c3f9bc0ec50a.png)

### t-SNEを用いた多様体学習
　PCAはデータを回転する必要があるため、実際に使える場面は限られてくる。
t-SNEは次元を圧縮し、2点間を確率分布で表現する。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/22db8da4-050e-8a9b-329e-7ae0b8e24985.png)

## クラスタリング
　データを「クラスタ」と呼ばれるグループに分類することを**クラスタリング(clustering)**という。

### k-meansクラスタリング
　**クラスタ重心**を見つけて分類するのがk-meansクラスタリングである。
以下の手順に沿って分類していく。

①クラスタ毎に各点の平均値を計算する。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/086dcf69-70e2-ccca-4a58-8b1b224a0e60.png)

②各データを、一番近いクラスタの平均値のクラスタにする。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/6eceab9a-1be3-3c8f-c8f0-a2adccf8c706.png)

　①と②を変化がなくなるまで繰り返す。

### 凝集型クラスタリング
　**凝集型クラスタリング(agglomerative clustering)**は、
「クラスタを2つに分類する」などの終了条件を設定し、
近くにあるデータを同じクラスタとみなす作業を
終了条件を満たすまで繰り返す。

　以下に例を示す。
この例では、「クラスタを2つに分類する」ことを終了条件とする。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/1fa763f8-3673-3854-ed90-a1f0d9127ff7.png)
　□を〇とみなし、
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/2dd59fb0-ffb0-635b-b2de-6bebea99a150.png)
　☆を×とみなし、
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/540d8588-7b94-f240-019a-5810cf137d53.png)
　残りも〇と×に分類され、
クラスタは2つに分類された。

### DBSCAN
　**DBSCAN(Density-Based Spatial Clustering of Application with Noise)**とは、
密度をもとに、データをノイズかそうでないかを判断するアルゴリズムである。
パラメータとして、半径eps、最低サンプル数min_samplesを設定する。
以下の例では、min_samplesを3とする。

　まず、ランダムに１つの点を選ぶ。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/98fd18c9-5a72-107e-ff8a-2c7ad8477019.png)

　その点から半径eps内にデータがmin_samples個以上あれば、
その点はコアサンプルとなる。
なければ、ノイズ扱いとなる。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/4a88d027-fa86-caf7-bc6f-e8afb837dd07.png)
　半径eps内にあるデータは、境界ポイントとして扱う。
各境界ポイントに対しても同様の処理を行う。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/1cc69c99-6ebb-96b2-66ce-5bb65f0fe47f.png)
　最終的に、データはコアサンプル、境界ポイント、ノイズの３種類に分類される。