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_iter
和 num_clusters
以查看找到解决方案所需的时间更长。
homo
和inertia
没有通用的阈值,因为数据集不同。应根据经验选择质心的数量,根据数据结构和这些输入应具有的聚类数量来判断。
compl
是在给定 class 的所有输入都分配给同一集群的情况下达到其上限 (1.0) 的完整性指标。鉴于它的区间是 [0.0, 1.0],你可以将它理解为一个比例。 homo
是区间等于compl
的同质性指标。如果每个集群包含单个 class 的输入,则它达到 1.0。 v_meas
只是这两个指标的调和平均值。
关于完整性分数和同质性度量的更多一般信息是 here。
此外,您应该考虑使用 PCA 减小维度大小,因为对大部分多维数据执行 KMeans 可能会得到不太令人满意的结果。
我有 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_iter
和num_clusters
以查看找到解决方案所需的时间更长。homo
和inertia
没有通用的阈值,因为数据集不同。应根据经验选择质心的数量,根据数据结构和这些输入应具有的聚类数量来判断。compl
是在给定 class 的所有输入都分配给同一集群的情况下达到其上限 (1.0) 的完整性指标。鉴于它的区间是 [0.0, 1.0],你可以将它理解为一个比例。homo
是区间等于compl
的同质性指标。如果每个集群包含单个 class 的输入,则它达到 1.0。v_meas
只是这两个指标的调和平均值。
关于完整性分数和同质性度量的更多一般信息是 here。
此外,您应该考虑使用 PCA 减小维度大小,因为对大部分多维数据执行 KMeans 可能会得到不太令人满意的结果。