#はじめに
somoclueというSOM(自己組織化マップ)ライブラリでクラスタリングをしてみたときにメモ。完全自分用メモ
#環境
- somoclue 1.7.5.1
#手順
##somocluのインストール
pip install somoclu
##必要ライブラリのインストール
今回はirisを使う。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.manifold import TSNE
from sklearn.datasets import load_iris
##irisのロード
おまじない。
iris_data = load_iris()
SOMによる学習とクラスタリング
実行すると自己組織化マップが得られる(図省略)
# セルの定義
n_rows = 16
n_cols = 24
som = Somoclu(n_rows=n_rows, n_columns=n_cols, compactsupport=False)
# 学習
som.train(data=iris_data.data, epochs=1000)
# K-meansでクラスタリング
kmeans = KMeans(n_clusters=5, random_state=42)
som.cluster(algorithm=kmeans)
som.view_umatrix(bestmatches=True, labels=iris_data.target)
クラスタリング結果の取得
How Can I get the cluster number or class for an specific data point? を参考にクラスタリング結果を取得。
cluster_ids = []
for i in range(len(x)):
cluster_ids.append(som.clusters[som.bmus[i, 1], som.bmus[i, 0]])
tSNEの次元削減図に対し、クラスタのラベルをマッピング
実行するとスキャッタープロットが得られる(図省略)
tsn_model = TSNE(n_components=2)
tsn_result = tsn_model.fit_transform(iris_data.data)
plt.title("tSNA")
plt.scatter(tsn_result[:, 0], tsn_result[:, 1], c=cluster_ids)