我读到了关于scikit学习的TfidfVectorizer实现,我不明白该方法的输出是什么,例如:
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. ]]
有人能更详细地向我解释这些输出吗?
谢谢!
TfidfVectorizer-将文本转换为可以用作估计器输入的特征向量。
vocabulary_
是一个字典,它将矩阵中的每个标记(单词)转换为特征索引,每个唯一的标记都得到一个特征索引。
什么是?(例如:u'me':8)
它告诉您,令牌"me"在输出矩阵中表示为特征编号8。
这是一个矩阵还是一个向量?
每个句子都是一个向量,你输入的句子是由3个向量组成的矩阵。在每个向量中,数字(权重)表示特征tf idf得分。例如:"julie":4-->告诉你,在每一句"julie"中,你都会有非零(tf-idf)权重。正如你在2'nd矢量中看到的:
[0。0.68091856 0。-0.51785612 0.517856120。0。0.]
第5个元素的得分为0.51785612,这是"朱莉"的tf idf得分。有关Tf-Idf评分的更多信息,请阅读此处:http://en.wikipedia.org/wiki/Tf%E2%80%93idf
因此,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时。文件:
他看篮球和棒球
及其输出
[5.57735027 0.57735027 0.5 7735027 0。0。00。0.0.]
相当于,
[棒球篮球他简朱莉喜欢琳达爱我胜过
由于我们的文件中只有这些单词:棒球、篮球、他,从词汇表中创造出来。文档矢量输出的值仅为这三个单词的tf idf,并且位于相同的排序词汇表位置。
tf-idf用于对文档进行分类,在搜索引擎中进行排名。tf:术语频率(文档中出现的单词数),idf:文档频率的倒数(单词对每个文档的重要性)。
该方法解决了不应平等加权所有单词的事实,使用权重来指示文档中最独特的单词,并最好用于表征文档。
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. ]]