K-Means 聚类性能基准测试

K-Means Clustering Performance Benchmarking

我有 688 个数据点的 157 维数据。我想对数据进行聚类。

由于K-Means是最简单的算法,我决定从这个方法入手。

这里是 Sklearn 函数调用:

KMeans(init='k-means++', n_clusters=4, n_init=10), name="k-means++", data=sales)

以下是一些输出指标:

init                  time    inertia   homo   compl  v-meas     ARI     AMI  num_clusters
k-means++             0.06s    38967   0.262   0.816   0.397   0.297   0.250      4
k-means++             0.05s    29825   0.321   0.847   0.466   0.338   0.306      6
k-means++             0.07s    23131   0.411   0.836   0.551   0.430   0.393      8
k-means++             0.09s    20566   0.636   0.817   0.715   0.788   0.621     10
k-means++             0.09s    18695   0.534   0.794   0.638   0.568   0.513     12
k-means++             0.11s    16805   0.773   0.852   0.810   0.916   0.760     14
k-means++             0.11s    15297   0.822   0.775   0.798   0.811   0.761     16

有人可以帮我解释一下吗?

我知道 inertia 低分和 homogeneity 高分是好事,但我不知道这些的好阈值是多少。

例如,15297 是我收到的最低 inertia,但是当 K-clusters 设置为 16 时会出现这种情况。这是好事还是坏事?

可用缩写:

homo = 同质性得分;

compl = 完整性分数;

v_meas = v-measure 分数;

ARI = 调整后的兰德得分;

AMI = 调整后的相互信息。


  • 质心越多,惯性越小。 拥有更多的质心 (num_clusters = centroids) 意味着可以通过更多方式将输入 class 化为一个中心,从而降低多维 space 中的整体惯性大小。然而,拥有更多质心也意味着机器可能更复杂地达到每个 n_init 中定义数量的 max_iter 的收敛(默认情况下,max_iter 设置为 300) .所以,你应该明白,对于质心的每个随机初始化(n_init 的每个开始),你的机器最多计算 KMeans 算法 300 次,试图达到一个状态,其中无法重新class输入。当然,如果更早达到收敛,则进行下一个n_init。同样,如果您的机器没有找到定义的迭代次数(在您的情况下为 300 次)的解决方案,那么它仍然会使用另一个随机放置的质心进行下一步。经过 10 次初始化后,将采用惯性方面的最佳输出。 您可以尝试同时增加 max_iternum_clusters 以查看找到解决方案所需的时间更长。

  • homoinertia没有通用的阈值,因为数据集不同。应根据经验选择质心的数量,根据数据结构和这些输入应具有的聚类数量来判断。

  • compl 是在给定 class 的所有输入都分配给同一集群的情况下达到其上限 (1.0) 的完整性指标。鉴于它的区间是 [0.0, 1.0],你可以将它理解为一个比例。 homo是区间等于compl的同质性指标。如果每个集群包含单个 class 的输入,则它达到 1.0。 v_meas 只是这两个指标的调和平均值。

  • ARI其实就是调整后的兰德分数。您可以阅读更多关于 ARI and AMI.

关于完整性分数和同质性度量的更多一般信息是 here


此外,您应该考虑使用 PCA 减小维度大小,因为对大部分多维数据执行 KMeans 可能会得到不太令人满意的结果。