k表示聚类方法得分为负

时间:2018-02-04 11:26:06

标签: python-3.x machine-learning scikit-learn cluster-analysis k-means

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

感谢任何帮助。

    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))

谢谢!

2 个答案:

答案 0 :(得分:0)

群集不是分类。

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

答案 1 :(得分:0)

k均值得分指示这些点距质心的距离。 在scikit学习中,分数越接近零越好。

差得分将返回较大的负数,而好的得分将返回接近零。通常,您将需要使用scores方法的输出绝对值,以便更好地可视化。