了解scikit learn KMeans返回的“score”

2024-05-15 01:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我对一组文本文档(大约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()值对于fit到底意味着什么吗?我如何利用这个价值来证明我的发现?


Tags: 文档modelinit聚类文本文档向量meansfit
1条回答
网友
1楼 · 发布于 2024-05-15 01:38:31

文档中选择的单词有点混乱。 它表示“与K-均值目标上X的值相反。“ 它表示K-均值目标的负数。

K-均值目标

K-means的目标是减少点到它们各自的簇质心距离的平方和。它有其他的名字,如J平方误差函数,J分数或在聚类平方和内。这个值说明集群内部的一致性。(越少越好)

The objective function can be directly obtained from the following method.

model.inertia_

网友
2楼 · 发布于 2024-05-15 01:38:31

文件上说:

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

要理解这意味着什么,你需要看看k-means算法。k-means的本质是寻找能够最小化数据样本与其关联的聚类中心之间距离之和的聚类中心。

这是一个两步过程,其中(a)每个数据样本与其最近的群集中心关联,(b)群集中心调整为位于与其关联的所有样本的中心。重复这些步骤,直到满足一个条件(最近两次迭代之间的最大迭代次数/最小变化次数)。

如您所见,数据样本与其关联的簇中心之间仍有一段距离,我们最小化的目标就是该距离(所有距离的总和)。

如果数据样本的种类繁多,如果数据样本的数量明显高于集群的数量(在您的情况下,集群的数量仅为two),那么自然会有很大的距离。相反,如果所有的数据样本都是相同的,那么不管集群的数量是多少,都会得到一个零距离。

不过,从文档中可以看出,所有值都是负值。如果你同时观察到消极和积极的价值观,也许还有比这更重要的东西。

我不知道你是怎么想到要分为两类的。

网友
3楼 · 发布于 2024-05-15 01:38:31

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.
"""

相关问题 更多 >

    热门问题