# Note: The runnable code example is at the end of this question ####
# Assume X_train contains cleaned sentence text as input data. Y_train are class labels.
# parameters stores the parameter to be tried by GridSearchCV
text_clf_Pipline_MultinomialNB = Pipeline([('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultinomialNB()),
])
gs_clf = GridSearchCV(text_clf_Pipline_MultinomialNB, parameters, n_jobs=-1)
gs_classifier = gs_clf.fit(X_train, y_train)
现在,我可以根据sklearn.naive_bayes.MultinomialNB文档从gs_classifier中获取feature_log_prob_ 。这是一个例子。
我的问题是如何使单词对应每个对数概率?CountVectorizer()和TfidfTransformer()都进行了功能选择。GridSearchCV对象在哪里存储所选单词/ ngram特征?如何使他们回到概率?
我检查了gs_classifier的成员,但未找到所选功能。谢谢。
以下是一个可运行的示例:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.grid_search import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import MultinomialNB
from inspect import getmembers
X_train = ['qwe rtyuiop', 'asd fghj kl', 'zx cv bnm', 'qw erty ui op', 'as df ghj kl', 'zxc vb nm', 'qwe rt yu iop', 'asdfg hj kl', 'zx cvb nm',
'qwe rt yui op', 'asd fghj kl', 'zx cvb nm', 'qwer tyui op', 'asd fg hjk l', 'zx cv b nm', 'qw ert yu iop', 'as df gh jkl', 'zx cvb nm',
'qwe rty uiop', 'asd fghj kl', 'zx cvbnm', 'qw erty ui op', 'as df ghj kl', 'zxc vb nm', 'qwe rtyu iop', 'as dfg hj kl', 'zx cvb nm',
'qwe rt yui op', 'asd fg hj kl', 'zx cvb nm', 'qwer tyuiop', 'asd fghjk l', 'zx cv b nm', 'qw ert yu iop', 'as df gh jkl', 'zx cvb nm']
y_train = ['1', '2', '3', '1', '1', '3', '1', '2', '3',
'1', '2', '3', '1', '4', '1', '2', '2', '4',
'1', '2', '3', '1', '1', '3', '1', '2', '3',
'1', '2', '3', '1', '4', '1', '2', '2', '4']
parameters = {
'clf__alpha': (1e-1, 1e-2),
'vect__ngram_range': [(1,2),(1,3)],
'vect__max_df': (0.9, 0.98)
}
text_clf_Pipline_MultinomialNB = Pipeline([('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultinomialNB()),
])
gs_clf = GridSearchCV(text_clf_Pipline_MultinomialNB, parameters, n_jobs=-1)
gs_classifier = gs_clf.fit(X_train, y_train)
nbclf = getmembers(gs_classifier.best_estimator_)[2][1]['named_steps']['clf']
nbclf.feature_log_prob_
那么问题是:如何在训练模型中获得与对数概率相对应的单词特征列表?同样,例如,_log_prob_输出中的哪个概率对应于类别“ 1”的单词“ qwe”?
得到答案后进行编辑:Andreas的答案有效:
gs_classifier.best_estimator_.named_steps['vect'].get_feature_names()
与此类似,还有一种更好的方法可以索引到GridSearchCV中以获得训练有素的分类器
nbclf = gs_classifier.best_estimator_.named_steps['clf']
为什么需要getmembers
?获取与相对应的特征名称feature_log_prob_
:
gs_classifier.best_estimator_.named_steps['vect'].get_feature_names()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句