VOOZH about

URL: https://qiita.com/hajime9652/items/b6a638c490978d6d5b90

⇱ データをシャッフルしてクラスタリングで元に戻すやつ Clustering Tips① #Python - Qiita


👁 Image
9

Go to list of users who liked

0

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 5 years have passed since last update.

@hajime9652(hajime hatano)in👁 Image
九州工業大学古川研究室

データをシャッフルしてクラスタリングで元に戻すやつ Clustering Tips①

9
Last updated at Posted at 2019-07-22

この記事は古川研究室 Workout_calendar 8日目の記事です。

クラスタラベルで元データを並び替える

シャッフルされたデータをクラスタリングしてみると元に戻るんでしょうか。データにクラスタ構造があって、変なことしてなければ戻ります。動作検証に使えますね。
クラスタリングで得られるのはクラスタラベルです、np.argsort()を使って並び替えれば元に戻るかどうかを確認できます。並び替えはこんな感じですX[np.argsort(clustering.labels_)]
👁 スクリーンショット 2019-07-22 23.48.55.png

元はこのようなデータでした。
👁 スクリーンショット 2019-07-22 23.49.05.png

データの生成はこんな感じです。

# toy data poisson
lm=1.0
n_node=100
n_cluster=4
adj = np.random.poisson(lm, (n_node, n_node))
adj_max = np.max(adj)
n_menber = n_node // n_cluster
mod = n_node % n_cluster
for s in range(n_cluster):
 s = s * n_menber
 e = s + n_menber
 adj[s:e, s:e] = adj_max * 5
 if mod != 0:
 adj = adj[-mod:, -mod:] + np.ones((mod, mod))

X = np.random.permutation(adj)

k-meansでやってみましょう。adjがシャッフル前のデータ、Xがシャッフル後のデータです。

kmeans = KMeans(n_clusters=4, random_state=0)
kmeans_X = kmeans.fit(X)
sns.heatmap(X[np.argsort(kmeans_X.labels_)])

はい、元に戻りました。
👁 スクリーンショット 2019-07-23 0.06.28.png

スペクトルクラスタリングでもやってみます。分解するんで正規化しておきます。
👁 スクリーンショット 2019-07-23 0.22.37.png

adj_n = np.array([np.abs(v - np.mean(vec))/np.std(vec) for vec in adj for v in vec]).reshape((100, 100))
X_n = np.random.permutation(adj_n)

sp_clustering = SpectralClustering(n_clusters=4, random_state=0)
sp_X = sp_clustering.fit(X_n)
sns.heatmap(X[np.argsort(sp_X.labels_)])

似たようなかんじですね、もどりました。
👁 スクリーンショット 2019-07-23 0.23.32.png

コード

本記事は人工データつくるときに得られたTipsでした。ここでコードを共有してます。Colabなんですぐ動かせます。adjとあるように隣接行列からBoWを生成するっていうコードでした。似たような状況で人工データを作りたい方はつかってください。

9

Go to list of users who liked

0
0

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9

Go to list of users who liked

0