关于 VotingClassifier

来源:13-7 Stacking

慕先生6474118

2018-07-04

老师,在VotingClassifier、还有BaggingClassifier,里面都要求传入一个参数分类器,我知道传入SVC(kernel='poly',C=0.075,coef0=0.1,degree=2)这样是可以的;但是如果和网格搜索结合使用的话,前面在gridsearch中通过搜索不仅得到了这一组最佳超参数,同时grid_search.best_estimator_这个模型也已经拟合了数据样本,我想问的是,传入的超参数可以是grid_search.best_estimator_吗? 这样比较简便,而且传入好像也能运行,但是有影响吗?谢谢老师~

写回答

2回答

liuyubobobo

2018-07-04

完全可以。


这种方式用在VotingClassifier上更合理。你可以想象成自己调参完成了三个模型(每个模型都是一个grid_search.best_estimator_),然后对同一组测试数据集,使用投票(少数服从多数)的方式决定最后的分类结果。VotingClassifier只不过对这个过程进行了包装。


从程序的角度,这个方式也可以用于BaggingClassifier,但是由于Bagging的思想是使用大量的随机弱分类器,用放回取样的方式对每一个分类器进行训练,希望每一个分类器稍有不同,最后综合他们的意见获得最终的结果。而你的grid_search.best_estimator_只有固定的一个,是没有随机性的,所以这种方式不适合BaggingClassifier。


而事实上,当你将这一个grid_search.best_estimator_送给BaggingClassifier的时候,BaggingClassifier也将忽略它已经训练好的参数,而是使用自己的随机取样的方式对n_estimators个这个送进去的分类器类型进行训练。


所以,Bagging传进去的这个分类器,叫base_estimator,他只是一个基础,告诉Bagging使用那种算法做聚合而已;而Voting传进去的分类器(列表),就叫做estimators,你传进去的分类器将直接被使用(而不是一个基础分类器)


要想看到这一点,也可以参阅文档中的参数名:

VotingClassifier: http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html

BaggingClassifier: http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html


加油!:)

0
3
慕先生6474118
回复
liuyubobobo
谢谢 bobo老师 的耐心解答,我已经懂了~
2018-07-05
共3条回复

慕先生6474118

提问者

2018-07-04

因为传入grid_search.best_estimator_的话 已经了拟合样本,也同时得到了一组系数确定了一条决策边界,传入的话对结果有影响吗?

0
0

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程