Sklearn 中的 TF 是如何计算的

How is TF calculated in Sklearn

我一直在试验 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。

我漏掉了文档中的一行

Each row is normalized to have unit euclidean norm

所以回答我自己的问题 - 答案是:

for i in xrange(countMat.toarray().__len__()):
    row = countMat.toarray()[i]
    row / np.sqrt(np.sum(row**2)) 

尽管我确信有一种更优雅的方法来对结果进行编码。