我不相信这是重复的,因为this或this都没有回答我要问的问题。
首先,MultinomialNB
确实有class_prior
参数(不是属性),如documentation的此片段中所示:
参数:
alpha:float,optional(默认值= 1.0)
Additive (Laplace/Lidstone) smoothing parameter (0 for no smoothing).
fit_prior:boolean,optional(default = True)
Whether to learn class prior probabilities or not. If false, a uniform prior will be used.
class_prior:类似数组,大小(n_classes,),可选(默认=无)
Prior probabilities of the classes. If specified the priors are not adjusted according to the data.
其次,以下代码及其输出证实了这一点:
NB_cls= MultinomialNB(alpha= 0.1, fit_prior = True, class_prior = [.2, .8])
NB_cls.get_params()
{' alpha':0.1,' class_prior':[0.2,0.8],' fit_prior':True}
但是,以下代码(旨在设置gridsearch以调整MultinomialNB
分类器的超参数)会显示一条错误消息,指出class_prior
不是参数:
alphas = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
p_grid_NB = {'alpha': alphas, 'fit_prior' : [True, False], 'class_prior ' : [None, [.1,.9],[.2, .8]]}
NB_cls= MultinomialNB()
grid = GridSearchCV(estimator = NB_cls, param_grid = p_grid_NB, scoring = 'roc_auc', cv = 5)
grid.fit(Train_X, Train_y)
ValueError:估算器的参数class_prior无效 MultinomialNB。检查可用参数列表
estimator.get_params().keys()
。
分类器的数据输入没有任何问题。以下是具有相同数据的工作代码(使用MLPClassifier
和SGDClassifier
进行网格搜索时也没有遇到任何问题):
nb_cls = MultinomialNB()
nb_cls.fit(Train_X, Train_y)
y_hat = nb_cls.predict(Test_X)
print accuracy_score(Test_y, y_hat)
0.73125
问题:关于设置此参数我缺少什么?
感谢您的见解。