K-Means 聚类性能基准测试

use*_*878 -1 cluster-analysis k-means unsupervised-learning scikit-learn

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

由于 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
Run Code Online (Sandbox Code Playgroud)

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

我知道有低分inertia和高分都很好homogeneity,但我不知道这些的好门槛是多少。

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

可用缩写:

homo= 同质性得分;

compl= 完整性得分;

v_meas= v-测量分数;

ARI= 调整后的兰德分数;

AMI= 调整后的相互信息。

E.Z*_*.Z. 5


  • 质心越多,惯性就越低。拥有更多的质心 ( num_clusters = centroids) 意味着将输入分类到中心的方式有更多,从而降低了多维空间中整体惯性的大小。max_iter然而,拥有更多的质心也意味着机器要达到每个定义数量的收敛n_init(默认情况下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实际上是调整后的兰德分数。您可以阅读有关ARIAMI 的更多信息。

有关完整性评分和同质性度量的更多一般信息请参见此处


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