投票分类器中的超参数
Posted
技术标签:
【中文标题】投票分类器中的超参数【英文标题】:Hyperparameter in Voting classifier 【发布时间】:2018-03-16 18:03:43 【问题描述】:所以,我有一个看起来像
的分类器clf = VotingClassifier(estimators=[
('nn', MLPClassifier()),
('gboost', GradientBoostingClassifier()),
('lr', LogisticRegression()),
], voting='soft')
我想从本质上调整每个估计器的超参数。
有没有办法调整这些分类器的“组合”? 谢谢
【问题讨论】:
【参考方案1】:使用GridSearchCV
clf = VotingClassifier(
estimators=[('lr',LogisticRegression()), ('gboost',GradientBoostingClassifier()),]
, voting='soft')
#put the combination of parameters here
p = ['lr__C':[1,2],'gboost__n_estimator':[10,20]]
grid = GridSearchCV(clf,p,cv=5,scoring='neg_log_loss')
grid.fit(X_train,Y_train)
【讨论】:
【参考方案2】:您可以使用 GridSearchCV 执行此操作,但需要稍作修改。在参数字典中而不是直接指定属性,您需要在 VotingClassfier 对象中使用 classfier 的键,后跟 __
,然后是属性本身。
看看这个例子
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
from sklearn.model_selection import GridSearchCV
X = np.array([[-1.0, -1.0], [-1.2, -1.4], [-3.4, -2.2], [1.1, 1.2],[-1.0, -1.0], [-1.2, -1.4], [-3.4, -2.2], [1.1, 1.2]])
y = np.array([1, 1, 2, 2,1, 1, 2, 2])
eclf = VotingClassifier(estimators=[
('svm', SVC(probability=True)),
('lr', LogisticRegression()),
], voting='soft')
#Use the key for the classifier followed by __ and the attribute
params = 'lr__C': [1.0, 100.0],
'svm__C': [2,3,4],
grid = GridSearchCV(estimator=eclf, param_grid=params, cv=2)
grid.fit(X,y)
print (grid.best_params_)
#'lr__C': 1.0, 'svm__C': 2
【讨论】:
param_grid 是否会尝试 [1,100] 到 [2,3,4] 之间所有可能的键组合,如 300 种组合并给出最佳结果?或者 param_grid 还有其他含义吗? @Labeo 不是在 1 到 100 之间,而是 1 到 100。所以只有 2x3=6 个组合。在这 6 种组合中,它给出了最好的结果以上是关于投票分类器中的超参数的主要内容,如果未能解决你的问题,请参考以下文章
分类器中的 scikit-learn refit/partial fit 选项
使用 Scikit-Learn API 时如何调整 XGBoost 分类器中的概率阈值