首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚类算法的准确性是多少?

聚类算法的准确性是多少?
EN

Stack Overflow用户
提问于 2019-12-15 18:19:45
回答 3查看 4.1K关注 0票数 1

我有一组使用聚类算法(在本例中为k-均值)聚类的点。我也知道真实的标签,我想衡量我的聚类有多精确。我需要的是找到真正的准确性。当然,问题在于聚类给出的标签与原来的顺序不匹配。

有办法测量这种准确性吗?直观的想法是计算每个标签组合的混淆矩阵的分数,并且只保留最大值。有这样的功能吗?

我也用兰德分数和调整后的兰德评分来评估我的结果。这两种测量方法离实际准确度有多近?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-16 14:14:58

首先,The problem, of course, is that the labels given by the clustering do not match the ordering of the original one.是什么意思?

如果你知道基本的真实标签,那么你可以重新排列它们来匹配X矩阵的顺序,这样,Kmeans在预测之后就会与真正的标签一致。

在这种情况下,我建议如下。

  • 如果您有基本真理标签,并且想要查看您的模型有多精确,那么您需要Rand索引之类的度量标准,或者预测标签和真标签之间的相互信息。您可以在交叉验证方案中这样做,并查看模型的行为,即它是否能够正确预测交叉验证方案下的类/标签。预测优度的评估可以使用兰德指数等指标来计算。

概述:

  • 定义K手段模型并使用交叉验证,并在每次迭代中估计赋值真标签之间的Rand索引(或相互信息)。对所有的迭代重复这一点,最后,取Rand指数分数的平均值。如果这个分数很高,那么模型是好的。

完整示例:

代码语言:javascript
复制
from sklearn.cluster import KMeans
from sklearn.metrics.cluster import adjusted_rand_score
from sklearn.datasets import load_iris
from sklearn.model_selection import LeaveOneOut
import numpy as np

# some data
data = load_iris()
X = data.data
y = data.target # ground truth labels
loo = LeaveOneOut()

rand_index_scores = []
for train_index, test_index in loo.split(X): # LOOCV here
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]

   # the model
   kmeans = KMeans(n_clusters=3, random_state=0)
   kmeans.fit(X_train) # fit using training data
   predicted_labels = kmeans.predict(X_test) # predict using test data
   rand_index_scores.append(adjusted_rand_score(y_test, predicted_labels)) # calculate goodness of predicted labels

print(np.mean(rand_index_scores))
票数 2
EN

Stack Overflow用户

发布于 2019-12-16 15:23:50

因为聚类是一个无监督的学习问题,所以您有其特定的度量标准:https://scikit-learn.org/stable/modules/classes.html#clustering-metrics

您可以参考scikit-learn用户指南中的讨论,以了解用于集群的不同指标之间的差异:https://scikit-learn.org/stable/modules/clustering.html#clustering-performance-evaluation

例如,调整后的兰德指数将比较一对点,并检查如果标签在地面上是相同的-真理,它将是相同的预测。与准确性不同的是,您不能使严格的标签相等。

票数 1
EN

Stack Overflow用户

发布于 2019-12-16 13:37:24

如下面提到的链接所示,您可以使用sklearn.metrics.accuracy。

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html

在下面提到的链接中可以看到一个例子

sklearn: calculating accuracy score of k-means on the test data set

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59346797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档