K-Means聚类性能基准测试

时间:2017-07-05 01:28:55

标签: scikit-learn cluster-analysis k-means unsupervised-learning

我的数据是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

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

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

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

可用缩写:

homo =同质性得分;

compl =完整性得分;

v_meas = v-measure得分;

ARI =调整兰德得分;

AMI =调整了相互信息。

1 个答案:

答案 0 :(得分:2)

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

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

此外,您应该考虑使用PCA缩小尺寸大小,因为在大部分多维数据上执行 KMeans 可能会产生不太令人满意的结果。