我希望确认一下在TfidfVectorizer对象中,属性use_idf和sublinear_tf的作用。我已经研究了几天。我正在尝试对具有不同长度的文档进行分类,并使用tf-idf进行特征选择。
我认为当use_idf=true
时,算法会规范化偏差,避免TF中一个词出现X次时,它不应该比出现1次的重要性高X倍这个固有问题。
利用tf*idf
公式。然后sublinear_tf=true
采取1+log(tf)
的形式,以规范化长文档与短文档之间的偏差。
我正在处理一种天生倾向于长文档的偏见(大多数属于一类),这种规范化是否真的减轻了偏见呢?
如何确保语料库中文档的长度没有整合到模型中?
我正在尝试验证规范化是否应用于模型中。我正在尝试提取语料库的规范化向量,所以我假设我可以只是总结Tfidfvectorizer矩阵的每行。然而,总和大于1,我原以为规范化的语料库会将所有文档转换为0-1的范围。
vect = TfidfVectorizer(max_features=20000, strip_accents='unicode',
stop_words=stopwords,analyzer='word', use_idf=True, tokenizer=tokenizer, ngram_range=(1,2),sublinear_tf= True , norm='l2')
tfidf = vect.fit_transform(X_train)
# sum norm l2 documents
vect_sum = tfidf.sum(axis=1)