我想使用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)特征,正如预期的那样包含特征,name_val是包含花值的矩阵,0表示刚毛,1表示杂色,2表示维吉尼亚
编辑:我想出的一个解决方案是将random_state设置为任何数字,以便标签是恒定的,还有其他解决方案吗?
发布于 2018-07-13 19:10:40
您需要查看clustering metrics来评估您的预测,这些预测包括
等
现在以完整性分数为例,
如果作为给定类成员的所有数据点都是同一聚类的元素,则聚类结果满足完备性。
例如
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-度量被定义为2 * (homogeneity * completeness) / (homogeneity + completeness)
请在此处阅读官方文档:Homogenity, completeness and V-measure
发布于 2018-07-13 16:29:48
首先,你不是在对数据进行分类,而是对数据进行聚类。分类是一个不同的过程。
K-Means算法在选择初始聚类中心时包含随机性。通过设置random_state,您可以重现相同的聚类,因为初始聚类中心将是相同的。但是,这并不能解决您的问题。你想要的是id为0的集群是setosa,1是versicolor等等。这是不可能的,因为K-Means算法不知道这些类别,它只根据花的相似性对花进行分组。您可以做的是创建一个规则来确定哪个集群对应于哪个类别。例如,您可以说,如果属于某个集群的花的50%以上也属于setosa类别,则应该将该集群的文档与setosa类别中的文档集进行比较。
这是我能想到的最好的方法。然而,这不是我们评估客户质量的方式,有一些指标可以使用,例如轮廓系数。我希望我能帮上忙。
发布于 2021-06-02 17:12:20
参考这个博客https://smorbieu.gitlab.io/accuracy-from-classification-to-clustering-evaluation/,你需要用匈牙利算法从混淆矩阵中得到关系。代码如下:
from scipy.optimize import linear_sum_assignment as linear_assignment
def cluster_acc(y_true, y_pred):
cm = metrics.confusion_matrix(y_true, y_pred)
_make_cost_m = lambda x:-x + np.max(x)
indexes = linear_assignment(_make_cost_m(cm))
indexes = np.concatenate([indexes[0][:,np.newaxis],indexes[1][:,np.newaxis]], axis=-1)
js = [e[1] for e in sorted(indexes, key=lambda x: x[0])]
cm2 = cm[:, js]
acc = np.trace(cm2) / np.sum(cm2)
return acc或仅导入库coclust
from coclust.evaluation.external import accuracy
accuracy(labels, predicted_labels)https://stackoverflow.com/questions/51320227
复制相似问题