次元圧縮し、可視化することでクラスタリングがうまくいっているかを目で確認したいことがあります。今回は非線形な関係もとらえ、次元圧縮できる特徴があります。
コード
sklearnにもt-sneは実装されているが、あまりお勧めしないという情報が多かったので、bhtsne
を用いる。
import bhtsne bhtsne.tsne(data,dimensions=2)
主成分分析と比べてみる
ここではwineのデータを使ってみる。
PCAは線形結合した結果が本の値になるように、tsneは非線形での分解になる。
import matplotlib.pyplot as plt from sklearn.datasets import load_wine wine = load_wine() import bhtsne tsne_res = bhtsne.tsne(wine.data,dimensions=2) plt.scatter(tsne_res[:,0],tsne_res[:,1]) pca = PCA(n_components=2) pca_res = pca.fit_transform(load_wine().data) plt.scatter(pca_res[:,0],pca_res[:,1])
tsneの方が2軸の関係がきれいな線になるように分解でき、PCAはそうならなかった。
クラスタリングしてみる
非線形な関係でのクラスタリングのDBSCANと相性が良いが、ひとまずkmeansで実施しました。
from sklearn.cluster import KMeans km = KMeans(n_clusters=6) km.fit(load_wine().data) df = pd.DataFrame( { "d0":res[:,0], "d1":res[:,1], "cls":km.labels_ } ) for i in range(6): tmp = df[df['cls']==i] plt.scatter(tmp['d0'],tmp['d1'])
2軸の変化にともない、クラスタが分かれていくことが分かる。