当使用k均值聚类时,我可以使用calinski和hrabasz验证来确定k吗



我想使用calinski和harabasz验证从python中的scikit包(metrics.calinski_harabaz_score)中自动选择k(k-means聚类)。

我循环遍历所有聚类范围以选择calinski_harabaz_score 的最大值

for kClusterCnt in range(2, 21) :
value = metrics.calinski_harabaz_score(datasets.data, kmCls.labels_)

当我只使用这种方法时,有什么缺陷或错误吗?

我认为您需要调用适合每个集群编号的kmean。我将scikit学习文档中的示例和您的代码合并如下。

from sklearn import metrics
from sklearn.metrics import pairwise_distances
from sklearn import datasets
dataset = datasets.load_iris()
X = dataset.data
y = dataset.target
import numpy as np
from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans_model.labels_
metrics.calinski_harabaz_score(X, labels)
for k in range(2, 21):
kmeans_model = KMeans(n_clusters=k, random_state=1).fit(X)
labels = kmeans_model.labels_
labels = kmeans_model.labels_
print k, metrics.calinski_harabaz_score(X, labels)

输出如下。

2 513.303843352
3 560.399924247
4 529.120719084
5 494.094381914
6 474.517429587
7 448.871449442
8 436.613024881
9 414.530317405
10 390.646480599
11 368.89696343
12 357.194592002
13 342.732084105
14 344.610818724
15 337.809470535
16 324.972019063
17 322.825466107
18 314.587220111
19 306.64863559
20 316.905301605

根据这个结果,3个聚类中心是最好的。"3 560.399924247".

请记住,由于初始化阶段的随机性,k-means是非确定性。这意味着你会得到一系列的答案,你必须对k的每个值进行抽样,以获得最适合k的答案。这不是一次就完成的。

相关内容

  • 没有找到相关文章

最新更新