![](/img/trans.png)
[英]getting top words from the tf-idf sparse matrix (highest tf-idf value)
[英]Why is the value of TF-IDF different from IDF_?
为什么向量化语料库的值和通过idf_
属性得到的值不idf_
? idf_
属性不应该以它在矢量化语料库中出现的相同方式返回逆文档频率(IDF)吗?
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["This is very strange",
"This is very nice"]
vectorizer = TfidfVectorizer()
corpus = vectorizer.fit_transform(corpus)
print(corpus)
语料库矢量化:
(0, 2) 0.6300993445179441
(0, 4) 0.44832087319911734
(0, 0) 0.44832087319911734
(0, 3) 0.44832087319911734
(1, 1) 0.6300993445179441
(1, 4) 0.44832087319911734
(1, 0) 0.44832087319911734
(1, 3) 0.44832087319911734
词汇和idf_
值:
print(dict(zip(vectorizer.vocabulary_, vectorizer.idf_)))
输出:
{'this': 1.0,
'is': 1.4054651081081644,
'very': 1.4054651081081644,
'strange': 1.0,
'nice': 1.0}
词汇索引:
print(vectorizer.vocabulary_)
输出:
{'this': 3,
'is': 0,
'very': 4,
'strange': 2,
'nice': 1}
为什么this
词在语料库中的IDF值是0.44
, idf_
得到的时候是1.0
?
这是因为l2
归一化,它默认应用于TfidfVectorizer()
。 如果您将norm
参数设置为None
,您将获得与idf_
相同的值。
>>> vectorizer = TfidfVectorizer(norm=None)
#output
(0, 2) 1.4054651081081644
(0, 4) 1.0
(0, 0) 1.0
(0, 3) 1.0
(1, 1) 1.4054651081081644
(1, 4) 1.0
(1, 0) 1.0
(1, 3) 1.0
此外,您计算功能对应的 idf 值的方法是错误的,因为dict
不保留顺序。
用:
>>>> print(dict(zip(vectorizer.get_feature_names(), vectorizer.idf_)))
{'is': 1.0,
'nice': 1.4054651081081644,
'strange': 1.4054651081081644,
'this': 1.0,
'very': 1.0}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.