python - 确定 k 均值聚类的准确性

标签 python scikit-learn k-means

我想使用 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评估您的预测,这些包括

  1. Homegenity Score
  2. V measure
  3. Completenss Score等等

现在以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/

相关文章:

python - 在 flask 中发送帖子请求

python - 自定义模型移至 scikit-learn

python - 软标签上的 scikit-learn 分类

hadoop - K表示群集

python - Python 中的线性/保序聚类

python - 获取使用 __init__ 重新创建对象所需的对象变量

python - 属性错误: object has no attribute in python

python - 改变单词的一部分

python - 如何以不同的方式打印模型的准确性?

python - numpy.linalg.norm 的作用是什么?