当使用kmeans集群时,我能用calinski和hrabasz验证来确定k吗?

2024-10-01 09:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用calinski和harabasz验证从python的scikit包中自动选择k(k-means集群)(metrics.calinski_harabaz_分数). 在

我在所有的聚类范围内循环选择calinski_harabaz_得分的最大值

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

当我只使用这种方法时,是否有任何缺陷或错误?在


Tags: inforvalue集群range聚类scikit分数
2条回答

我想你需要为每个集群编号调用kmeans fit。我合并了来自scikit learn documentation的示例和下面的代码。在

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}$

根据这个结果,3个聚类中心是最好的3560.399924247英寸。在

请记住,由于初始化阶段的随机性,k均值是非确定性的。这意味着你会得到一个范围的答案,你必须对这个范围的每一个k值进行抽样,以得到与k最匹配的答案。这不是一蹴而就的事。在

相关问题 更多 >