gpt4 book ai didi

python - 当我们只向 kmeans 提供单个单词的 tfidf 向量时,kmeans 如何知道如何对文档进行聚类?

转载 作者:太空狗 更新时间:2023-10-29 22:15:50 28 4
gpt4 key购买 nike

我正在使用 scikit learn 的 Kmeans 算法对评论进行聚类。

sentence_list=['hello how are you', "I am doing great", "my name is abc"]

vectorizer=TfidfVectorizer(min_df=1, max_df=0.9, stop_words='english', decode_error='ignore')
vectorized=vectorizer.fit_transform(sentence_list)

km=KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1)
km.fit(vectorized)

当我打印向量化的输出时,它会给我单词的索引和索引的 tf-idf 分数。

所以我想知道,鉴于我们只得到单词的 tfidf 分数,我们如何设法根据单个单词而不是整个文档的分数来对文档进行聚类?或者它可能会这样做......有人可以向我解释这背后的概念吗?

最佳答案

您应该看看 Kmeans algorithm 是如何实现的作品。首先,停用词永远不会被向量化,因此被 Kmeans 完全忽略,并且对文档的聚类方式没有任何影响。现在假设您有:

sentence_list=["word1", "word2", "word2 word3"]

假设您想要 2 个集群。在这种情况下,您希望第二个和第三个文档在同一个集群中,因为它们共享一个公共(public)词。让我们看看这是如何发生的。

文档向量化的数字表示如下:

word1     word3     word2
1 0.000000 0.000000 # doc 1
0 1.000000 0.000000 # doc 2
0 0.605349 0.795961 # doc 3

在 Kmeans 的第一步中,一些质心是从数据中随机选择的,例如,文档 1 和文档 3 将作为初始质心:

Centroid 1:     [1, 0.000000, 0.000000]

Centroid 2: [0, 0.605349, 0.795961]

现在,如果您计算从每个点(文档)到两个质心中的每一个的距离,您将看到:

  • 文档 1 到质心 1 的距离为 0,因此它属于质心 1
  • 文档 3 到质心 2 的距离为 0,因此它属于质心 2

最后我们计算剩余文档 2 与每个质心之间的距离,以找出它属于哪个质心:

>>> from scipy.spatial.distance import euclidean

>>> euclidean([0, 1, 0], [1, 0, 0]) # dist(doc2, centroid1)
1.4142135623730951

>>> euclidean([0, 1, 0], [0, 0.605349, 0.795961]) # dist(doc2, centroid2)
0.8884272507056005

所以第二个文档和第二个质心更近,这意味着第二个文档被分配到第二个质心。

关于python - 当我们只向 kmeans 提供单个单词的 tfidf 向量时,kmeans 如何知道如何对文档进行聚类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585918/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com