我想使用 sklearns k-means 聚类函数对鸢尾花数据集进行分类(虽然我删除了标签,所以它现在是未标记的数据)。我已经制作了预测模型,输出似乎在很大程度上正确地对数据进行了分类,但是它是随机选择标签(0、1 和 2),我无法将它与我自己的标签进行比较以确定准确性(我已将 setosa 标记为 0,versicolor 标记为 1,virginica 标记为 2)。有什么方法可以正确标记花朵?
代码如下:
from sklearn.cluster import KMeans
cluster = KMeans(n_clusters = 3)
cluster.fit(features)
pred = cluster.labels_
score = round(accuracy_score(pred, name_val), 4)
print('Accuracy scored using k-means clustering: ', score)
features,如预期包含特征,name_val是包含花值的矩阵,0代表setosa,1代表versicolor,2代表virginica
编辑:我想出的一个解决方案是将 random_state 设置为任意数字,以便标签保持不变,还有其他解决方案吗?
最佳答案
你需要看看clustering metrics评估您的预测,这些包括
现在以Completeness Score为例,
A clustering result satisfies completeness if all the data points that are members of a given class are elements of the same cluster.
例如
from sklearn.metrics.cluster import completeness_score
print completeness_score([0, 0, 1, 1], [1, 1, 0, 0])
#Output : 1.0
这与您想要的相似。对你来说,代码是 completeness_score(pred, name_val)。请注意,分配给数据点的标签并不重要,重要的是它们之间的标签。
另一方面,同质性关注同一集群内数据点的质量。而 V-measure 定义为 2 * (homogeneity * completeness)/(homogeneity + completeness)
在这里阅读官方文档:Homogenity, completeness and V-measure
关于python - 确定 k 均值聚类的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51320227/