2014-12-02 16 views
6
'yi inceleyin

Her iki sayımı ve tfidf'i çok terimli bir NB modelinin özellikleri olarak kullanmayı deniyorum. İşte benim kod:Sayımlar ve tfidf ile scikit'in özelliklerini kullanma

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) 

Ama FeatureUnion ve tfidf bir hatayı alıyorum:

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

herhangi bir fikir bu neden oluyor olabilir? Özellikler olarak hem sayım hem de tfidf olması mümkün değil mi?

cevap

8

hata FeatureUnion gelmedi, Bunu yerine TfidfTransformer ait TfidfVectorizer kullanmalıdır TfidfTransformer

geldi, trafo giriş ve olmayan düz metin olarak bir numpy dizi dolayısıyla TypeError beklediğini

Ayrıca test cümlesi Tfidf testi için çok küçüktür, bu yüzden daha büyük bir kullanmayı deneyin, işte bir örnek:

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) 
İlgili konular