繁体   English   中英

理解scikit-learn KMeans返回的“得分”

[英]Understanding “score” returned by scikit-learn KMeans

我在一组文本文档(大约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()值究竟是什么意思? 如何使用此值来证明我的发现?

在文档中它说:

Returns:    
score : float
Opposite of the value of X on the K-means objective.

要理解这意味着你需要看一下k-means算法。 k-means基本上做的是找到集群中心,以最小化数据样本与其相关集群中心之间的距离之和。

这是一个两步过程,其中(a)每个数据样本与其最近的聚类中心相关联,(b)聚类中心被调整为位于与它们相关的所有样本的中心。 重复这些步骤,直到满足标准(最后两次迭代之间的最大迭代次数/最小值变化)。

如您所见,数据样本与其相关的聚类中心之间仍然存在距离,我们最小化的目标是距离(所有距离的总和)。

如果数据样本的种类很多,如果数据样本的数量明显高于集群的数量(在您的情况下只有两个) ,则自然会获得较大的距离。 相反,如果所有数据样本都相同,则无论簇的数量如何,总是会得到零距离。

从文档中我可以预期所有值都是负数。 如果您同时观察到负值和正值,那么得分可能会超过此值。

我想知道你是怎么想到集群成两个集群的。

ypnos是对的,你可以在这里找到一些细节: https//github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/cluster/k_means_.py#L893

inertia : float
    Sum of distances of samples to their closest cluster center.
"""

文档选择的单词有点令人困惑。 它说“ X对K均值目标的价值相反。 ”这意味着K均值目标的负面影响。

K-Means目标

K均值中的目标是减少点距离它们各自的聚类质心的平方和。 它有其他名称,如J-Squared误差函数,J-score或簇内平方和。 该值表示集群内部的连贯性。 (越少越好)

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

model.inertia_

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM