投票分类器中的超参数

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 选项

调整 SVM OVO 和 OVA 中的超参数以进行多类分类

使用 Scikit-Learn API 时如何调整 XGBoost 分类器中的概率阈值

如何在 keras 分类器中使用交叉验证

在 MATLAB 分类学习器中,导出模型后是不是可以提取该模型的参数?

两个分类器之间的投票如何在 sklearn 中工作?