【问题标题】:Distortion function from K Means of Scikit-Learn来自 Scikit-Learn 的 K 均值的失真函数
【发布时间】:2012-07-16 18:56:20
【问题描述】:

在进行 K 时,要获得失真函数(每个点到其中心的距离之和)意味着通过 Scikit-Learn 进行聚类,一种简单的方法是获取中心 (k_means.cluster_centers_) 并总结每个点的距离.

只是想知道是否有更快的方法? (就程序员时间而言)类似直接函数调用之类的东西。

【问题讨论】:

  • 我猜有,因为获取集群中心意味着无论如何都要对距离求和。

标签: python k-means scikit-learn


【解决方案1】:

这已经在fit 时间在inertia_ 属性中为KMeans 类预先计算。

>>> from sklearn.datasets import load_iris
>>> from sklearn.cluster import KMeans
>>> iris = load_iris()
>>> km = KMeans(3).fit(iris.data)
>>> km.inertia_
78.940841426146108

【讨论】:

  • 也要检查集群大小,np.bincount(km.labels_)——如果它们严重不平衡,你就有问题了。 (你有多少个集群?)
【解决方案2】:

根据失真度量的定义,它可以是

距离平方和 每个示例到其最近的聚类中心。

欧几里得平方距离的平均值到各个簇的质心。

对于后一种情况,您可以访问 Can distortion be derived from inertia rather than recalculating it from scratch in case of kmeans?

KMeans 中的 inertia_ 属性在official docs 中定义为

样本到最近的聚类中心的距离平方和, 如果提供,则按样本权重加权。

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2018-10-15
    • 2019-06-28
    • 1970-01-01
    • 2021-11-04
    • 2018-05-18
    相关资源
    最近更新 更多