KMeansは簡単で強力な教師なし学習(クラスタリング)の手法だ。
簡単に実装できるし、アルゴリズムも理解しやすいが、唯一の欠点は、kの値(いくつのクラスターに分類するか)を事前に決めなければならないことだろう。
KMeansにおけるkの値は、エルボー法によって求めることができる。
エルボー法の手順
- kの数を変えながら、KMeansによるクラスタリングを複数回行う
- それぞれの結果におけるSSE(Sum of Square Error、クラスタ内誤差平方和)を求める
- x軸にk、y軸にSSEの値を取り、折れ線グラフを描く
- 見た目で、折れ線グラフの傾きが緩やかになってきているあたり(折れ線グラフを腕に見立てたときの肘(エルボー)のあたり)を、適切なkの数とする
参考:
では、実装例。まずはkの数を変えながらKMeansを複数回行う。それぞれのモデルは配列に格納しておく。
from sklearn.cluster import KMeans
# 8通りのモデルを格納するリスト
list_for_models = []
for i in range(2, 10):
cls = KMeans(n_clusters=i)cls.fit(ddf)
list_for_models.append(cls)
次に、x軸にkを、y軸にSSEをとる折れ線グラフを描く。
SSE = []
for cls in list_for_models:
SSE.append(cls.inertia_)
plt.plot(np.arange(2,10), SSE, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.legend()
plt.show()
plt.clf()
0 コメント