我一直在试验sklearn的Tfidfvectorizer
。我只关心TF,而不关心idf,所以我的设置有use_idf = FALSE
完整设置为:
vectorizer = TfidfVectorizer(max_df=0.5, max_features= n_features,
ngram_range=(1,3), use_idf=False)
我一直在尝试复制.fit_transform
的输出,但到目前为止还没有成功,希望有人能为我解释这些计算。
我的玩具示例是:
document = ["one two three one four five",
"two six eight ten two"]
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
n_features = 5
vectorizer = TfidfVectorizer(max_df=0.5, max_features= n_features,
ngram_range=(1,3), use_idf=False)
X = vectorizer.fit_transform(document)
count = CountVectorizer(max_df=0.5, max_features= n_features,
ngram_range=(1,3))
countMat = count.fit_transform(document)
我假设计数矢量器的计数将与Tfidf矢量器中使用的计数相同。因此,我试图更改countMat对象以匹配X.
我在文档中漏掉了一行,上面写着
每一行被归一化为具有单位欧氏范数
因此,回答我自己的问题——答案是:
for i in xrange(countMat.toarray().__len__()):
row = countMat.toarray()[i]
row / np.sqrt(np.sum(row**2))
尽管我确信有一种更优雅的方式来编码结果。