今日は教師なし学習について
お品書き
教師なし学習とは
正解情報(=教師データ)を持たない学習を指し、主に
・次元削減
・特徴抽出
・表現学習
・クラスタリング
に用いられます。今回は教師なし学習の代表的な手法を紹介します。
教師なし学習の例
主成分分析(PCA)
データの説明に重要な特徴を抽出する手法。
上図が主成分分析の一例、です。特に注目してほしいのが一番右の写真、この画像は87*65=5655ピクセルで構成されていますが、一番右の画像は500枚の画像の和で元の画像を復元できております。
つまり5655個のデータの集まりを500個のデータの集まりで復元できます。なので次元圧縮や特徴量抽出として主成分分析は用いられます。
コードはこれ
from sklearn.datasets import fetch_lfw_people from sklearn.model_selection import train_test_split from sklearn.decomposition import PCA import numpy as np people = fetch_lfw_people(min_faces_per_person=20, resize=0.7) image_shape=people.images[0].shape mask=np.zeros(people.target.shape, dtype=np.bool) for target in np.unique(people.target): mask[np.where(people.target==target)[0][:50]]=1 X_people=people.data[mask] y_people=people.target[mask] X_people/=255 X_train,X_test,y_train,y_test = train_test_split(X_people, y_people, stratify=y_people, random_state=0) mglearn.plots.plot_pca_faces(X_train, X_test, image_shape)
k平均クラスタリング-距離ベース
主にクラスタリングで用いられる手法です。下図のようにやります。
1.入力データが与えられる
2.適当にクラスタセンタを取る
3.入力データを最も近いクラスタセンタが属するクラスにラベル付ける
4.クラスの平均位置にクラスタセンタを更新する
5. 3.4.を繰り返す
6.しばらくするとクラスタセンタが動かなくなり、終了
コードはこちら
import mglearn mglearn.plots.plot_kmeans_algorithm()
上図のようにしてデータを分類します。ただし、クラスタセンタがランダムに取られるので、収束が遅かったり、精度があまりよろしくないというデメリットがあります。
k-means++
k平均クラスタリングの問題点を解消した手法です。違いは
・初期値をデータ点の中から選ぶ
・クラスタセンタの更新時に重み確率分布を用いて、データ点xから新しいクラスタ中心をランダムにk個選ぶことを繰り返す。
これにより収束が早くなるメリットがあります。
DBSCAN-密度ベース
k平均は距離ベースで行っていましたが、今度は密度ベースで行う手法です。
引用:
データ点を
・コア(赤点):自身から一定半径以内に指定個数minPts以上の隣接点がある点
・ボーダー(黄点):自身から一定半径以内に指定個数以上minPtsの隣接点はないものの、コアから以内にある点
・ノイズ(青点):それ以外
に分類し、一定半径以内にあるコア点同士を結びクラスタ化し、ボーダー店は最近傍のコア点のクラスタに割り当る手法。
ちなみに距離ベースと密度ベース、どちらのほうが良いかというと
こちらが距離ベース
こちらが密度ベース
となり、二次元データでは密度ベースのほうがうまくいくそうです。
画像引用:
以上になります。
参考文献