scikit-learn TfidfVectorizer的含义是什么?

25

我在阅读关于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.        ]]

有人可以更详细地解释一下这些输出吗?

谢谢!

3个回答

20

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


输出中的u参数是什么?使用Anaconda/Scikit的最新下载版本,它没有显示出来。现在它不再在输出中显示吗? - BluePython
1
FYI - 这是Unicode或非Unicode之间的区别(在Python 3之前的版本中指定)。 - BluePython

8
所以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:逆文档频率(每个文档中单词的重要性)。

3
这个更好地解释了。谢谢,伙计。 - Akash Kandpal

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接