了解scikit-learn KMeans返回的“分数”

31

我在一组文本文档(约100个)上应用了聚类。我使用TfIdfVectorizer将它们转换为Tfidf向量,并将向量提供为输入scikitlearn.cluster.KMeans(n_clusters=2, init='k-means++', max_iter=100, n_init=10)的参数。现在当我

model.fit()
print model.score()

如果所有文本文档非常相似,我的向量会得到一个非常小的值,如果文档非常不同,则会得到一个非常大的负值。这可以满足我发现哪些文档集合是相似的基本目的,但是否有人可以帮助我理解这个model.score()值在拟合中具体表示什么?我如何使用这个值来证明我的发现?

3个回答

16

文档选择的词用法有些令人困惑。

它说“X在K-means目标上的相反值。”实际上指的是K-means目标函数的负值。

K-Means目标函数

K-Means中的目标是将点到它们各自簇中心的距离平方和最小化。它还有其他名称,例如J-Squared误差函数、J分数或簇内平方和。此值表示群集内部的一致性程度(越小越好)。

可以直接从以下方法中获取目标函数。

model.inertia_


14

在文档中写道:

Returns:    
score : float
Opposite of the value of X on the K-means objective.
为了理解这意味着什么,您需要查看k-means算法。 k-means算法本质上是找到最小化数据样本与它们关联的聚类中心之间距离总和的聚类中心的过程。
这是一个两步过程,其中 (a) 将每个数据样本与其最近的聚类中心相关联, (b) 聚类中心被调整为位于与它们相关联的所有样本的中心点处。这些步骤将重复进行,直到满足某个标准(最大迭代次数/最后两次迭代之间的最小变化)。
正如您所看到的,数据样本与它们关联的聚类中心之间仍然存在距离,我们的最小化目标是距离(所有距离的总和)。
如果数据样本具有很大的种类差异,如果数据样本的数量明显高于聚类数量,那么您自然会得到较大的距离,而在您的案例中只有两个聚类。相反,如果所有数据样本都相同,则无论聚类数量如何,您始终会获得零距离。
从文档中,我期望所有值都是负数。如果您观察到了负值和正值,则可能评分背后还有更多内容。
不过我很好奇您是如何想到将聚类划分为两个的。

谢谢,这很有帮助...我一直在尝试不同数量的聚类。就像你提到的那样,如果文档相似,距离将始终为零(或非常接近)。只是我需要知道score()函数返回的具体内容(以聚类评估为例)。例如,在分类中,score()返回准确性。 - Prateek Dewan
要了解分数确切返回什么,您可能需要查看软件本身。但是K-means的目标在这里定义:https://en.wikipedia.org/wiki/K-means_clustering#Description 如您所见,它非常简单。对我来说,它似乎是您获得的一种度量,对您有所帮助,但只是您想要测量的近似值,并带有一些副作用。 - ypnos

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接