sklearn 的 iris 數(shù)據(jù)集里,樣本共有3種分類。我們拿它來演示一下 k-means。
假設(shè)我們不知道 iris 里的幾百個樣本是怎樣分類的,但是我們知道一共有3種分類,那么可以讓 k-means 聚類成3個簇。
獲取數(shù)據(jù)集
from sklearn.datasets import load_iris
iris = load_iris()
print(iris.feature_names)
print(iris.data[:5])
print("類別:{}".format(iris.target_names))
輸出:
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]]
類別:['setosa' 'versicolor' 'virginica']
聚類
model = KMeans(n_clusters=3)
model.fit(iris.data)
predict = model.predict(iris.data)
print("聚類結(jié)果:")
print(predict)
輸出:
聚類結(jié)果:
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 0 0 0 0 2 0 0 0 0
0 0 2 2 0 0 0 0 2 0 2 0 2 0 0 2 2 0 0 0 0 0 2 0 0 0 0 2 0 0 0 2 0 0 0 2 0
0 2]
評估
使用輪廓系數(shù)來評估聚類效果:
score = silhouette_score(iris.data, predict)
print("輪廓系數(shù):{}".format(score))
輸出:
輪廓系數(shù):0.5525919445213676
輪廓系數(shù)的值在(-1, 1)之間。
一般來說,輪廓系數(shù)超過 0.1 就算是成功的聚類。 iris 數(shù)據(jù)集質(zhì)量很高,這次聚類的輪廓系數(shù)達(dá)到 0.55,可以說是非常不錯的結(jié)果了。