Bet*_*lee 1 python cluster-analysis k-means scikit-learn
我想使用 python 中 scikit 包中的 calinski 和 harabasz 验证自动选择 k(k 均值聚类)(metrics.calinski_harabaz_score)。
我循环遍历所有聚类范围以选择 calinski_harabaz_score 的最大值
for kClusterCnt in range(2, 21) :
value = metrics.calinski_harabaz_score(datasets.data, kmCls.labels_)
Run Code Online (Sandbox Code Playgroud)
仅使用该方法是否有任何缺陷或错误?
我认为您需要为每个簇编号调用 kmeans 。我合并了scikit learn 文档中的示例和您的代码,如下所示。
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)
Run Code Online (Sandbox Code Playgroud)
输出如下。
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
Run Code Online (Sandbox Code Playgroud)
根据这个结果,3个聚类中心是最好的。“3 560.399924247”。
| 归档时间: |
|
| 查看次数: |
6071 次 |
| 最近记录: |