Clustering
scikit learn中的聚類慣性公式
我想使用 pandas 和 scikit learn 在 python 中編寫一個 kmeans 聚類。為了選擇好的 k,我想對 Tibshirani 和 al 2001 ( pdf ) 的 Gap Statistic 進行編碼。
我想知道我是否可以使用scikit 的慣性結果並調整間隙統計公式,而無需重新編碼所有距離計算。
有誰知道 scikit 中使用的慣性公式/知道使用高級距離函數重新編碼間隙統計的簡單方法?
我想我找到了 kmeans 聚類的答案:
通過查看 git 源代碼,我發現對於 scikit learn,慣性計算為每個點到其最近的質心(即其分配的集群)的距離平方和。所以在哪裡是分配集群的質心,並且是平方距離。
現在差距統計的公式涉及
在哪裡是簇中所有點之間的平方距離之和. 通過介紹,在平方距離公式中(是集群的質心坐標),我有一個對應於慣性的術語(如在 scikit 中)+一個術語,如果每個是每個簇的重心(應該是 kmeans)。所以我猜實際上是 scikit Inertia。
我還有兩個問題:
- 你認為我的微積分是正確的嗎?(例如,我不知道它是否適用於層次聚類。)
- 如果我在上面是正確的,我已經編碼了差距統計(作為估計和聚類之間的對數慣性的差異)並且它表現得很糟糕,特別是在 iris 數據集上,有人試過嗎?