KMeansによるクラスタリングにおける適切なkの数の求め方

KMeansは簡単で強力な教師なし学習(クラスタリング)の手法だ。

簡単に実装できるし、アルゴリズムも理解しやすいが、唯一の欠点は、kの値(いくつのクラスターに分類するか)を事前に決めなければならないことだろう。

KMeansにおけるkの値は、エルボー法によって求めることができる。


エルボー法の手順

  1. kの数を変えながら、KMeansによるクラスタリングを複数回行う
  2. それぞれの結果におけるSSE(Sum of Square Error、クラスタ内誤差平方和)を求める
  3. x軸にk、y軸にSSEの値を取り、折れ線グラフを描く
  4. 見た目で、折れ線グラフの傾きが緩やかになってきているあたり(折れ線グラフを腕に見立てたときの肘(エルボー)のあたり)を、適切な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 コメント