我認爲你需要調用適合每個簇號的kmeans。我將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 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。不要*依賴*這些措施,總是*手動驗證*您的羣集*。 –
謝謝你的回覆。我知道我必須用平方和和其他方法來檢查聚類數。但是我需要製作一個程序,它自動選擇K並運行集羣,而無需人爲決定。所以我寫了一些問題來獲得一些建議。 – Bethlee
不,不要*依靠平方和!自動聚類是一個矛盾。 –