问题 scikit-learn TfidfVectorizer是什么意思?


我正在阅读有关TfidfVectorizer的文章 履行 scikit-learn,我不明白该方法的输出,例如:

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

任何人都可以更详细地解释这些输出吗?

谢谢!


1348
2017-09-17 23:50


起源



答案:


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

vocabulary_ 是一个将每个标记(单词)转换为矩阵中的特征索引的字典,每个唯一标记都会获得一个特征索引。

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

它告诉您标记'me'在输出矩阵中表示为特征号8。

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

每个句子都是一个向量,你输入的句子是带有3个向量的矩阵。 在每个向量中,数字(权重)表示特征tf-idf得分。 例如: 'julie':4 - >告诉你,每个句子'Julie'看起来你的重量都是非零(tf-idf)。正如你在2'向量中看到的那样:

[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


9
2017-09-18 10:42



输出中的u参数是什么?使用Anaconda / Scikit的新下载并没有显示出来。它现在没有显示在输出中吗? - BluePython
仅供参考 - 它是unicode与否之间的区别(在Python 3之前的版本中指定)。 - BluePython


答案:


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

vocabulary_ 是一个将每个标记(单词)转换为矩阵中的特征索引的字典,每个唯一标记都会获得一个特征索引。

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

它告诉您标记'me'在输出矩阵中表示为特征号8。

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

每个句子都是一个向量,你输入的句子是带有3个向量的矩阵。 在每个向量中,数字(权重)表示特征tf-idf得分。 例如: 'julie':4 - >告诉你,每个句子'Julie'看起来你的重量都是非零(tf-idf)。正如你在2'向量中看到的那样:

[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


9
2017-09-18 10:42



输出中的u参数是什么?使用Anaconda / Scikit的新下载并没有显示出来。它现在没有显示在输出中吗? - BluePython
仅供参考 - 它是unicode与否之间的区别(在Python 3之前的版本中指定)。 - BluePython


因此,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

相当于,

[棒球篮球他jane julie喜欢linda比我更爱我]

由于我们的文件只有这些词:棒球,篮球,他,从词汇创建。文档向量输出仅对这三个单词和相同的排序词汇位置具有tf-idf的值。

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


1
2018-01-18 15:37



这个解释得更好。谢了哥们。 - harrypotter0