使用计数和 tfidf 作为 scikit 学习的特征



我正在尝试将计数和tfidf用作多项式朴素贝叶斯模型的特征。这是我的代码:

text = ["this is spam", "this isn't spam"]
labels = [0,1]
count_vectorizer = CountVectorizer(stop_words="english", min_df=3)
tf_transformer = TfidfTransformer(use_idf=True)
combined_features = FeatureUnion([("counts", self.count_vectorizer), ("tfidf", tf_transformer)]).fit(self.text)
classifier = MultinomialNB()
classifier.fit(combined_features, labels)

但是我在FeatureUniontfidf上遇到错误:

TypeError: no supported conversion for types: (dtype('S18413'),)

知道为什么会发生这种情况吗?难道不能同时将计数和 tfidf 作为特征吗?

错误不是来自FeatureUnion,而是来自TfidfTransformer

您应该使用 TfidfVectorizer 而不是 TfidfTransformer ,转换器期望一个 numpy 数组作为输入而不是明文,因此 TypeError

此外,您的测试句子对于 Tfidf 测试来说太小了,因此请尝试使用更大的句子,这里有一个例子:

from nltk.corpus import brown
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.pipeline import FeatureUnion
from sklearn.naive_bayes import MultinomialNB
# Let's get more text from NLTK
text = [" ".join(i) for i in brown.sents()[:100]]
# I'm just gonna assign random tags.
labels = ['yes']*50 + ['no']*50
count_vectorizer = CountVectorizer(stop_words="english", min_df=3)
tf_transformer = TfidfVectorizer(use_idf=True)
combined_features = FeatureUnion([("counts", count_vectorizer), ("tfidf", tf_transformer)]).fit_transform(text)
classifier = MultinomialNB()
classifier.fit(combined_features, labels)

相关内容

  • 没有找到相关文章