kmeansのinertiaとは何物か
暇だったのでkmeansのdocumentationを読んでいたら、今まで曖昧な理解だった"inertia"という語についてまとまった言及があったので、自分用メモ。
2.3. Clustering — scikit-learn 0.21.3 documentation
inertiaとは
kmeansの最適化において最小化すべき指標で、各クラスター内の二乗誤差のこと。
- 凸面や等方性を想定しており、細長い集合などイレギュラーな構造が合わさった集合などを扱うのには向いていない
- 正規化された指標ではないので「低い方が良く、0が最適」以上のことは言えない
inertiaの算出
ここでは、直接的な関数を使わずにinertiaを算出してみる。Jupyter notebookのコードはGithubで公開。
サンプル
下記記事の内容を利用。
上記のようにクラスター分けされた集合でのinertiaを算出する。関数を用いると、以下の値が出る。
print ('Distortion: %.2f'% km.inertia_)
Distortion: 72.48
定義から計算
定義の通り、各クラスターごとの中心点との二乗誤差を足し上げる。関数を用いた結果と、ほぼほぼ一致した。
SSE = 0 for cluster in range(3): SSE += sum((km.cluster_centers_[cluster,0] - X[y_km==cluster,0])**2 + (km.cluster_centers_[cluster,1] - X[y_km==cluster,1])**2) print(SSE)
72.47601671