#目的
下図のようななんとなく数が3つに別れているデータを、3つに分類しその分類毎の平均値を出したかったので、ソフトを書いてみました。
#コード
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を手動分けした実平均を比較した。順番が違うだけでほぼ同じ結果が得られている。すごい。
#その他
KMeans の random_state=10 のパラメータが何をしているか調べてもわからなかった。
初期クラスター位置のランダム生成に関わるパラメータなのでしょうか?
とりあえず参考にしたURLを真似ましたが、設定の考え方がわかる方がいらっしゃったら教えてほしいです。