为什么矢量化语料库的值与通过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
?
1条答案
按热度按时间qjp7pelc1#
这是因为
l2
规范化,默认情况下在TfidfVectorizer()
中应用。如果将norm
参数设置为None
,则将获得与idf_
相同的值。此外,您计算特性的相应idf值的方法是错误的,因为
dict
不保留顺序。您可以使用以下方法: