K-Means 聚类性能基准测试

Posted

技术标签:

【中文标题】K-Means 聚类性能基准测试【英文标题】:K-Means Clustering Performance Benchmarking 【发布时间】:2017-12-08 12:10:34 【问题描述】:

我有 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

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

我知道inertiahomogeneity 得分低是好的,但我不知道这些的好阈值是多少。

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

可用的缩写:

homo = 同质性分数;

compl = 完整性分数;

v_meas = v-测量分数;

ARI = 调整后的兰德分数;

AMI = 调整后的相互信息。

【问题讨论】:

您需要阅读有关所有这些措施的文献。例如,如果您设置 k=688,则惯性将为 0。但这不会是一个好结果,不是吗?但是这个问题太宽泛了,在这里无法回答,抱歉。 【参考方案1】:

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

由于数据集不同,homoinertia 没有通用阈值。质心的数量应该根据数据的结构和这些输入应该具有的聚类数量来判断。

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

ARI实际上是调整后的兰德分数。您可以阅读有关ARI 和AMI 的更多信息。

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


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

【讨论】:

以上是关于K-Means 聚类性能基准测试的主要内容,如果未能解决你的问题,请参考以下文章

性能基准自动化测试

关于MySQL的基准测试

基准程序的基准程序测试

Go语言之基准测试

什么是mysql基准测试

golang 基准测试和性能测试总结