如果我有两个包含相同单词的句子,并且这个单词在两个句子中都显示相同的计数(频率),那么为什么Tf-Idf得分对我们来说会有所不同?
考虑这个文本列表:
data = [
'Jumper in knit.',
'A sweater in knit, black sweater.',
]
并认为我适合并转换了CountVectorizer
和TfIdfTransformer
,如
count_vec = CountVectorizer(stop_words='english')
tf_transformer = TfidfTransformer(use_idf=True)
X_counts = count_vec.fit_transform(x_data_manual)
X_tfidf = tf_transformer.fit_transform(X_counts)
然后我用他们的IDFs分数打印这些功能:
print zip(count_vec.get_feature_names(), tf_transformer.idf_)
获得
[(u' black',1.4054651081081644),(u' jumper',1.4054651081081644),(u' knit',1.0),(u'毛衣&# 39;,1.4054651081081644)]
所以我们可以看到所有令牌都具有相同的IDF,除了' knit'都是合法的。
如果我现在要求打印计数矩阵和TF-IDF矩阵,
print X_counts.todense()
print X_tfidf.todense()
我得到的是分别
[[0 1 1 0]
[1 0 1 2]]
(这是合法的)和
[[0. 0.815 0.58 0.]
[0.426 0. 0.303 0.852]]
现在,我认为TF-IDF得分将是术语频率的倍数(无论从计数/原始频率计算得出)和IDF,但我看到'编织'尽管频率相同,但在两个句子中得分不同。
那么我错过了什么/误会?