理解scikit-learn KMeans返回的"得分"

Pra*_*wan 18 python k-means scikit-learn

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

model.fit()
print model.score()
Run Code Online (Sandbox Code Playgroud)

在我的向量上,如果所有文本文档非常相似,我会得到一个非常小的值,如果文档非常不同,我得到一个非常大的负值.

它的基本目的是找到哪一组文件是相似的,但是有人可以帮我理解这个model.score()值究竟是什么意味着合适吗?如何使用此值来证明我的发现?

ypn*_*nos 10

在文档中它说:

Returns:    
score : float
Opposite of the value of X on the K-means objective.
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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


Tar*_*apu 9

文档选择的词有点令人困惑。它说“与 K 均值目标上的 X 值相反。 ”这意味着 K 均值目标的负值。

K-均值目标

K-means 的目标是减少点与各自聚类质心的距离的平方和。它还有其他名称,如 J-Squared 误差函数、J-score 或簇内平方和。该值说明集群的内部一致性。(越少越好)

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

model.inertia_


小智 7

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.
"""
Run Code Online (Sandbox Code Playgroud)