K-Means聚类

2018-11-29  本文已影响13人  囧书

sklearn 的 iris 数据集里,样本共有3种分类。我们拿它来演示一下 k-means。
假设我们不知道 iris 里的几百个样本是怎样分类的,但是我们知道一共有3种分类,那么可以让 k-means 聚类成3个簇。

获取数据集

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("聚类结果:")
print(predict)

输出:

聚类结果:
[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]

评估

使用轮廓系数来评估聚类效果:

score = silhouette_score(iris.data, predict)
print("轮廓系数:{}".format(score))

输出:

轮廓系数:0.5525919445213676

轮廓系数的值在(-1, 1)之间。
一般来说,轮廓系数超过 0.1 就算是成功的聚类。 iris 数据集质量很高,这次聚类的轮廓系数达到 0.55,可以说是非常不错的结果了。

上一篇 下一篇

猜你喜欢

热点阅读