【问题标题】:scikit-learn TfidfVectorizer meaning?scikit-learn TfidfVectorizer 是什么意思?
【发布时间】:2014-11-12 04:06:55
【问题描述】:

我正在阅读 scikit-learn 的 TfidfVectorizer implementation,我不明白该方法的输出是什么,例如:

new_docs = ['He watches basketball and baseball', 'Julie likes to play basketball', 'Jane loves to play baseball']
new_term_freq_matrix = tfidf_vectorizer.transform(new_docs)
print tfidf_vectorizer.vocabulary_
print new_term_freq_matrix.todense()

输出:

{u'me': 8, u'basketball': 1, u'julie': 4, u'baseball': 0, u'likes': 5, u'loves': 7, u'jane': 3, u'linda': 6, u'more': 9, u'than': 10, u'he': 2}
[[ 0.57735027  0.57735027  0.57735027  0.          0.          0.          0.
   0.          0.          0.          0.        ]
 [ 0.          0.68091856  0.          0.          0.51785612  0.51785612
   0.          0.          0.          0.          0.        ]
 [ 0.62276601  0.          0.          0.62276601  0.          0.          0.
   0.4736296   0.          0.          0.        ]]

什么是?(例如:u'me': 8 ):

{u'me': 8, u'basketball': 1, u'julie': 4, u'baseball': 0, u'likes': 5, u'loves': 7, u'jane': 3, u'linda': 6, u'more': 9, u'than': 10, u'he': 2}

这是一个矩阵还是一个向量?,我无法理解输出告诉我什么:

[[ 0.57735027  0.57735027  0.57735027  0.          0.          0.          0.
   0.          0.          0.          0.        ]
 [ 0.          0.68091856  0.          0.          0.51785612  0.51785612
   0.          0.          0.          0.          0.        ]
 [ 0.62276601  0.          0.          0.62276601  0.          0.          0.
   0.4736296   0.          0.          0.        ]]

谁能更详细地解释一下这些输出?

谢谢!

【问题讨论】:

    标签: machine-learning nlp scikit-learn feature-extraction document-classification


    【解决方案1】:

    该方法解决了所有单词的权重不应该相等的事实,使用权重来指示文档中最独特的单词,并且最适合用来表征它。

    new_docs = ['basketball baseball', 'basketball baseball', 'basketball baseball']
    new_term_freq_matrix = vectorizer.fit_transform(new_docs)
    print (vectorizer.vocabulary_)
    print ((new_term_freq_matrix.todense()))
    
    
    {'basketball': 1, 'baseball': 0}
        [[ 0.70710678  0.70710678]
         [ 0.70710678  0.70710678]
         [ 0.70710678  0.70710678]]
    
    new_docs = ['basketball baseball', 'basketball basketball', 'basketball basketball']
    new_term_freq_matrix = vectorizer.fit_transform(new_docs)
    print (vectorizer.vocabulary_)
    print ((new_term_freq_matrix.todense()))
    
    {'basketball': 1, 'baseball': 0}
        [[ 0.861037    0.50854232]
         [ 0.          1.        ]
         [ 0.          1.        ]] 
    
    new_docs = ['basketball basketball baseball', 'basketball basketball', 'basketball 
    basketball']
    new_term_freq_matrix = vectorizer.fit_transform(new_docs)
    print (vectorizer.vocabulary_)
    print ((new_term_freq_matrix.todense())) 
    
    
    {'basketball': 1, 'baseball': 0}
    [[ 0.64612892  0.76322829]
    [ 0.          1.        ]
    [ 0.          1.        ]]
    

    【讨论】:

      【解决方案2】:

      所以 tf-idf 从整套文档中创建了一套自己的词汇表。在第一行输出中可以看到。 (为了更好理解我已经排序了)

      {u'baseball': 0, u'basketball': 1, u'he': 2, u'jane': 3, u'julie': 4, u'likes': 5, u'linda': 6,  u'loves': 7, u'me': 8, u'more': 9, u'than': 10, }
      

      当文档被解析得到它的 tf-idf.文件:

      他看篮球和棒球

      及其输出,

      [ 0.57735027 0.57735027 0.57735027 0. 0. 0. 0. 0. 0. 0. 0. ]

      等价于,

      [棒球篮球他简朱莉喜欢琳达爱我胜过]

      由于我们的文档只有这些词:棒球、篮球、他,来自创建的词汇表。文档向量输出只有这三个单词的 tf-idf 值,并且在相同的排序词汇表位置。

      tf-idf 用于对文档进行分类,在搜索引擎中排名。 tf: 词频(文档中出现的词的数量来自它自己的词汇表),idf: 逆文档频率(词对每个文档的重要性)。

      【讨论】:

      • 这个解释得更好。谢谢,伙计。
      【解决方案3】:

      TfidfVectorizer - 将文本转换为可用作估计器输入的特征向量。

      vocabulary_是一个字典,将每个token(词)转换为矩阵中的特征索引,每个唯一的token得到一个特征索引。

      什么是?(例如:u'me': 8)

      它告诉您标记“我”在输出矩阵中表示为特征编号 8。

      这是一个矩阵还是一个向量?

      每个句子都是一个向量,您输入的句子是由 3 个向量组成的矩阵。 在每个向量中,数字(权重)代表特征 tf-idf 得分。 例如: 'julie': 4 --> 告诉你在每个句子中出现'Julie' 你将有非零(tf-idf)权重。正如您在第二个向量中看到的那样:

      [ 0.0.68091856 0.0.0.51785612 0.51785612 0. 0. 0. 0. 0. ]

      第 5 个元素得分 0.51785612 - 'Julie' 的 tf-idf 得分。 有关 Tf-Idf 评分的更多信息,请阅读此处:http://en.wikipedia.org/wiki/Tf%E2%80%93idf

      【讨论】:

      • 输出中的u参数是什么?使用新下载的 Anaconda/Scikit 并没有出现。它现在不显示在输出中了吗?
      • 仅供参考 - 这是 unicode 与否之间的区别(在 Python 3 之前的版本中指定)。
      猜你喜欢
      • 2018-01-23
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2020-01-03
      • 2020-07-13
      • 2014-08-22
      • 2021-04-13
      相关资源
      最近更新 更多