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
有人可以帮我解释一下吗?
我知道inertia
和homogeneity
得分低是好的,但我不知道这些的好阈值是多少。
例如,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_iter
和num_clusters
以查看找到解决方案所需的时间。
由于数据集不同,homo
和 inertia
没有通用阈值。质心的数量应该根据数据的结构和这些输入应该具有的聚类数量来判断。
compl
是如果给定类的所有输入都分配给同一个集群,则达到其上限 (1.0) 的完整性度量。鉴于其区间为 [0.0, 1.0],您可以将其解释为比例。 homo
是间隔等于compl
的同质性度量。如果每个集群包含单个类的输入,则它达到 1.0。 v_meas
只是这两个指标的调和平均值。
ARI
实际上是调整后的兰德分数。您可以阅读有关ARI 和AMI 的更多信息。
有关完整性分数和同质性度量的更多一般信息是here。
此外,您应该考虑使用 PCA 减小维度大小,因为对大量多维数据执行 KMeans 可能会产生不太令人满意的结果。
【讨论】:
以上是关于K-Means 聚类性能基准测试的主要内容,如果未能解决你的问题,请参考以下文章