LoginSignup
2
0

More than 3 years have passed since last update.

pythonでk-meansを使ってクラスタリング

Posted at

目的

下図のようななんとなく数が3つに別れているデータを、3つに分類しその分類毎の平均値を出したかったので、ソフトを書いてみました。
クラスタリング.png

コード

sklearn のKMeansを用いると色々考えなくて良さそう(参考ページ。こちらのほうが素晴らしい)


from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import pandas as pd

#close all figure
plt.close('all')

#read Initial Data
Data = pd.read_excel('kmeanData.xlsx')

plt.figure()
plt.plot(Data.x,Data.y,'bo')


#k-meansによる分類
kmeans_model = KMeans(n_clusters=3, random_state=10).fit(Data.iloc[:, 1:])

labels = kmeans_model.labels_
#重心取得
center = kmeans_model.cluster_centers_

# 描画して確認
# それぞれに与える色を決める。
color_codes = {0:'#00FF00', 1:'#FF0000', 2:'#0000FF'}

# サンプル毎に色を与える。
colors = [color_codes[x] for x in labels]

# 色分けした Scatter Matrix を描く。
plt.figure()
plt.scatter(Data.x,Data.y,color=colors)

結果

Kmeansの出した結果と元データにしたExcelを手動分けした実平均を比較した。順番が違うだけでほぼ同じ結果が得られている。すごい。

image.png

その他

KMeans の random_state=10 のパラメータが何をしているか調べてもわからなかった。 
初期クラスター位置のランダム生成に関わるパラメータなのでしょうか?
とりあえず参考にしたURLを真似ましたが、設定の考え方がわかる方がいらっしゃったら教えてほしいです。

2
0
0

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
2
0