我同意大卫的评论。您可能想训练不同的模型,看看哪个是最好的。
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB, GaussianNB, BernoulliNB
from sklearn.pipeline import Pipeline
from sklearn.grid_search import GridSearchCV
from pprint import pprint
df = pd.DataFrame({'Keyword': ['buy widget', 'buy widgets', 'fiberglass widget',
'fiberglass widgets', 'how much are widget',
'how much are widgets', 'installing widget',
'installing widgets', 'vinyl widget', 'vinyl widgets',
'widget cost', 'widget estimate', 'widget install',
'widget installation', 'widget price', 'widget pricing',
'widgets cost', 'widgets estimate', 'widgets install',
'widgets installation', 'widgets price', 'widgets pricing',
'wood widget', 'wood widgets'],
'Label': ['Buy', 'Buy', 'Fiberglass', 'Fiberglass', 'Cost', 'Cost',
'Install', 'Install', 'Vinyl', 'Vinyl', 'Cost', 'Estimate',
'Install', 'Install', 'Cost', 'Cost', 'Cost', 'Estimate',
'Install', 'Install', 'Cost', 'Cost', 'Wood', 'Wood']},
columns=['Label', 'Keyword'])
X = df['Keyword']
y = df['Label']
##pipeline = Pipeline(steps=[
## ('cvect', CountVectorizer()),
## ('mnb', MultinomialNB())
## ])
pipeline = Pipeline(steps=[
('tfidf', TfidfVectorizer()),
('bnb', BernoulliNB())
])
parameters = {'tfidf__ngram_range': [(1,1), (1,2)],
'tfidf__stop_words': [None, 'english'],
'tfidf__use_idf': [True, False],
'bnb__alpha': [0.0, 0.5, 1.0],
'bnb__binarize': [None, 0.2, 0.5, 0.7, 1.0],
'bnb__fit_prior': [True, False]}
grid = GridSearchCV(pipeline, parameters, scoring='accuracy', cv=2, verbose=1)
grid.fit(X, y)
print('Best score:', grid.best_score_)
print('Best parameters:', pprint(grid.best_params_, indent=2))
# Here's how to predict (uncomment)
#pred = grid.predict(['buy wood widget', 'how much is a widget'])
#print(pred)