2017-03-28 4 views
0

C'est la première fois que je fais un apprentissage automatique supervisé. C'est un sujet assez avancé (au moins pour moi) et je trouve difficile de spécifier une question, car je ne suis pas sûr de ce qui ne va pas.Apprentissage automatique supervisé avec scikit-learn

# Create a training list and test list (looks something like this): 
train = [('this hostel was nice',2),('i hate this hostel',1)] 
test = [('had a wonderful time',2),('terrible experience',1)] 

# Loading modules 
from sklearn.naive_bayes import MultinomialNB 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn import metrics 

# Use a BOW representation of the reviews 
vectorizer = CountVectorizer(stop_words='english') 
train_features = vectorizer.fit_transform([r[0] for r in train]) 
test_features = vectorizer.fit([r[0] for r in test]) 

# Fit a naive bayes model to the training data 
nb = MultinomialNB() 
nb.fit(train_features, [r[1] for r in train]) 

# Use the classifier to predict classification of test dataset 
predictions = nb.predict(test_features) 
actual=[r[1] for r in test] 

Ici, je reçois l'erreur:

float() argument must be a string or a number, not 'CountVectorizer' 

Cela me confond, puisque les notes originales que je zippé avec les commentaires sont les suivants:

type(ratings_new[0]) 
int 
+0

Avez-vous une trace de pile et/ou un numéro de ligne sur lequel l'erreur se produit? – Hans

+0

Est-ce l'information que vous cherchez? Traceback (dernier appel en dernier) en () ----> 1 prédictions = nb.predict (test_features) – Lisadk

Répondre

1

Vous devez changer la ligne

test_features = vectorizer.fit([r[0] for r in test]) 

à:

test_features = vectorizer.transform([r[0] for r in test]) 

La raison est que vous avez déjà utilisé vos données d'entraînement pour s'adapter vectorisation, de sorte que vous n'avez pas besoin pour l'adapter à nouveau vos données de test. Au lieu de cela, vous devez le transformer.