【发布时间】:2018-11-26 04:20:50
【问题描述】:
我正在测试 Scikitlearn 的一些功能,虽然它们的 example 对我来说工作得很好并返回一个数字表示剪影,但当我在 Iris 数据集上执行等效操作时,它会显示一个聚类,然后总是为剪影平均:
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
import matplotlib.pyplot as plt
iris = datasets.load_iris()
print(dir(iris))
print(iris.DESCR)
#print(iris.data[:,1:3]) second and third part of each, columns.
X = iris.data[:, 1:3]
for i in range(2,11):
model = KMeans(n_clusters=i, random_state=0)
model.fit(X)
#print(model.labels_) #Different number for each "cluster" found.
centroids = model.cluster_centers_
#Separate xs [:, 0], ys [:,1] and scatter plot:
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=170, zorder=10, c='m')
plt.scatter(X[:, 0], X[:, 1], c=model.labels_)
#print(plt.scatter.__doc__) # <--- what are the arguments?
plt.xlabel("Sepal width")
plt.ylabel("Petal length")
print(X)
print(model.labels_)
print('For %d clusters the average silhouette score is %d' % (i, silhouette_score(X, model.labels_)))
plt.show()
为什么要这样做,因为它似乎给了它一个与 Scikit 示例相似的 X 数组和标签?
【问题讨论】:
-
您正在从
float转换为int(%d),请在打印时使用%f
标签: python matplotlib scikit-learn k-means