我有个数据:
df = pd.DataFrame({'docs': ['gamma alfa beta beta epsilon', 'beta gamma eta',], 'labels': ['alfa alfa beta', 'gamma fi']})我使用计数向量器:
import numpy as np
import pandas as pd
from itertools import chain
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
vocab_docs = set(chain(*[i.split() for i in df['docs'].unique()]))
cv_docs = CountVectorizer(vocabulary=vocab_docs)
cv_docs_s = cv_docs.fit_transform(df['docs'])我做的是过渡联邦国防军:
tfidf_docs = TfidfVectorizer(vocabulary=vocab_docs)
tfidf_docs_s = tfidf_docs.fit_transform(df['docs'])
# tfidf docs
tfidf_docs_s = tfidf_docs_s.todense()但我发现结果是不同的:
test = np.multiply(cv_docs_s.todense(), tfidf_docs.idf_)
test != tfidf_docs_s 为什么CountVectorizer * TfidfVectorizer.idf_的结果与TfidfVectorizer.fit_transform()不同?
发布于 2019-09-18 08:42:41
默认情况下,TfidfVectorizer将对每一行进行规范化。从文档中我们可以看到:
范数:‘L1’,‘l2’或‘None’,可选的(默认值=‘L2’) 每一行都有单位范数,即:*‘L2’:向量元素的平方和为1。当应用l2范数时,两个向量之间的余弦相似性是它们的点乘积。*‘L1’:向量元素绝对值之和为1。参见preprocessing.normalize。
将norm设置为None将给出您期望的结果:
tfidf_docs = TfidfVectorizer(vocabulary=vocab_docs, norm=None)https://datascience.stackexchange.com/questions/60366
复制相似问题