【问题标题】:how tfidf value is used in k-means clustering如何在 k-means 聚类中使用 tfidf 值
【发布时间】:2020-06-03 05:01:38
【问题描述】:

我正在使用 TF-IDF 和 sckit-learn 库进行 K-means 聚类。我知道 K-means 使用距离来创建集群,距离用(x 轴值,y 轴值)表示,但 tf-idf 是单个数值。我的问题是这个 tf-idf 值如何通过 K-means 聚类转换为 (x,y) 值。

【问题讨论】:

    标签: python-3.x nlp k-means tf-idf tfidfvectorizer


    【解决方案1】:

    TF-IDF 不是单个值(即标量)。对于每个文档,它返回一个向量,其中向量中的每个值对应于词汇表中的每个单词。

    from sklearn.feature_extraction.text import TfidfVectorizer
    import numpy as np
    from scipy.sparse.csr import csr_matrix
    
    sent1 = "the quick brown fox jumps over the lazy brown dog"
    sent2 = "mr brown jumps over the lazy fox"
    
    corpus = [sent1, sent2]
    vectorizer = TfidfVectorizer(input=corpus)
    
    X = vectorizer.fit_transform(corpus)
    print(X.todense())
    

    [出]:

    matrix([[0.50077266, 0.35190925, 0.25038633, 0.25038633, 0.25038633,
             0.        , 0.25038633, 0.35190925, 0.50077266],
            [0.35409974, 0.        , 0.35409974, 0.35409974, 0.35409974,
             0.49767483, 0.35409974, 0.        , 0.35409974]])
    

    它返回一个二维矩阵,其中行代表句子,列代表词汇。

    >>> vectorizer.vocabulary_
    {'the': 8,
     'quick': 7,
     'brown': 0,
     'fox': 2,
     'jumps': 3,
     'over': 6,
     'lazy': 4,
     'dog': 1,
     'mr': 5}
    

    因此,当 K-means 尝试查找两个文档之间的距离/相似度时,它执行的是矩阵中两行之间的相似度。例如。假设相似度只是两行之间的点积:

    import numpy as np
    vector1 = X.todense()[0]
    vector2 = X.todense()[1]
    float(np.dot(vector1, vector2.T))
    

    [出]:

    0.7092938737640962
    

    Chris Potts 有一个很好的教程,介绍了如何创建像 TF-IDF 这样的向量空间模型 http://web.stanford.edu/class/linguist236/materials/ling236-handout-05-09-vsm.pdf

    【讨论】:

      猜你喜欢
      • 2010-12-20
      相关资源
      最近更新 更多