k 表示聚类方法得分为负

Posted

技术标签:

【中文标题】k 表示聚类方法得分为负【英文标题】:k means cluster method score negative 【发布时间】:2018-07-14 10:08:12 【问题描述】:

伙计们。我还是一个尝试学习 ML 的初学者,所以请原谅我提出这么简单的问题。我有一个来自 UCI ML Repository 的数据集。因此,开始应用各种无监督算法,其中我也应用了 K 均值聚类算法。当我打印出准确度分数时,它是负数,不是一次而是多次。据我所知分数不是负数。所以你能帮我解释为什么它是负面的。

感谢任何帮助。

    import pandas as pd
import numpy as np

a = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data', names = ["a", "b", "c", "d","e","f","g","h","i"])

b = a

c = b.filter(a.columns[[8]], axis=1)
a.drop(a.columns[[8]], axis=1, inplace=True)

from sklearn.preprocessing import LabelEncoder

le1 = LabelEncoder()
le1.fit(a.a)
a.a = le1.transform(a.a)

from sklearn.preprocessing import OneHotEncoder

x = np.array(a)
y = np.array(c)

ohe = OneHotEncoder(categorical_features=[0])

ohe.fit(x)

x = ohe.transform(x).toarray()

from sklearn.model_selection import train_test_split

xtr, xts, ytr, yts = train_test_split(x,y,test_size=0.2)

from sklearn import cluster

kmean = cluster.KMeans(n_clusters=2, init='k-means++', max_iter=100, n_init=10)
kmean.fit(xtr,ytr)
print(kmean.score(xts,yts))

谢谢!!

【问题讨论】:

我认为您选择了错误的数据集进行聚类。 Abalone data set - Associated Tasks: Classification。最好选择one of those 谢谢!!当然,我会努力的。 【参考方案1】:

聚类不是分类。

请注意,fit 的“y”参数被忽略。 Kmeans 将始终预测 0,1,...,k-1。所以它永远不会在这个数据集上做出正确的标签,因为它甚至不知道标签应该是什么样子。将您在分类中所做的事情转移到聚类中确实不起作用。你需要从头开始重新学习。不同的工作流程,不同的评价。

【讨论】:

【参考方案2】:

k-means 分数表示点与质心的距离。 在 scikit learn 中,分数越接近零越好。

差的分数会返回一个很大的负数,而好分数会返回接近于零的值。通常,您会希望从 score 方法中获取输出的绝对值以获得更好的可视化效果。

【讨论】:

以上是关于k 表示聚类方法得分为负的主要内容,如果未能解决你的问题,请参考以下文章

分类模型评估指标

准确率,精确度(AP)与召回率(AR)

三种聚类方法:层次、K均值、密度

sklearn:计算测试数据集上k-means的准确度得分

聚类分析

R语言中的划分聚类模型