您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:22:12 python 字数 2452 阅读 528 来源 www.jb51.cc/python

我正在使用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'

概述

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的单词分数,我们如何根据单个单词而不是整个文档的分数来管理文档?或许也可以这样做.有人向我解释这背后的概念吗?

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

让我们说你想要2个集群.在这种情况下,您希望第二个和第三个文档位于同一个集群中,因为它们共享一个共同的单词.让我们看看这是如何发生的.

docs矢量化的数字表示如下所示:

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的距离为0到质心1,因此它属于质心1
>文档3的距离为0到质心2,因此它属于质心2

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

>>> from scipy.spatial.distance import euclidean

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

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

因此第二个文档和第二个质心更接近,这意味着第二个文档被分配给第二个质心.

总结

以上是编程之家为你收集整理的python – 当我们只提供单个单词的向量时,kmeans如何知道如何对文档进行聚类?全部内容,希望文章能够帮你解决python – 当我们只提供单个单词的向量时,kmeans如何知道如何对文档进行聚类?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶