对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物。集成学习可谓是上分大杀器,今天就跟大家分享在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器—集成学习。

什么是集成学习

  正所谓“三个臭皮匠赛过诸葛亮”的道理,在机器学习数据挖掘的工程项目中,使用单一决策的弱分类器显然不是一个明智的选择,因为各种分类器在设计的时候都有自己的优势和缺点,也就是说每个分类器都有自己工作偏向,那集成学习就是平衡各个分类器的优缺点,使得我们的分类任务完成的更加优秀。
   在大多数情况下,这些基本模型本身的性能并不是非常好,这要么是因为它们具有较高的偏差(例如,低自由度模型),要么是因为他们的方差太大导致鲁棒性不强(例如,高自由度模型)。集成方法的思想是通过将这些弱学习器的偏差和/或方差结合起来,从而创建一个「强学习器」(或「集成模型」),从而获得更好的性能。
集成学习的方法:

  • 基于投票思想的多数票机制的集成分类器(MajorityVoteClassifier)
  • 于bagging思想的套袋集成技术(BaggingClassifier)
  • 基于boosting思想的自适应增强方法(Adaboost)
  • 分层模型集成框架stacking(叠加算法)

基于投票思想的集成分类器


以上是多数投票的流程图:

  1. 分别训练n个弱分类器。
  2. 对每个弱分类器输出预测结果,并投票(如下图)
  3. 每个样本取投票数最多的那个预测为该样本最终分类预测。

使用多个模型单独测试

## 加载相关库
from sklearn.datasets import load_iris   # 加载数据
from sklearn.model_selection import train_test_split  # 切分训练集与测试集
from sklearn.preprocessing import StandardScaler  # 标准化数据
from sklearn.preprocessing import LabelEncoder   # 标签化分类变量## 初步处理数据
iris = load_iris()
X,y = iris.data[50:,[1,2]],iris.target[50:]
le = LabelEncoder()
y = le.fit_transform(y)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.5,random_state=1,stratify=y)## 我们使用训练集训练三种不同的分类器:逻辑回归 + 决策树 + k-近邻分类器
from sklearn.model_selection import cross_val_score   # 10折交叉验证评价模型
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import Pipeline   # 管道简化工作流
clf1 = LogisticRegression(penalty='l2',C=0.001,random_state=1)
clf2 = DecisionTreeClassifier(max_depth=1,criterion='entropy',random_state=0)
clf3 = KNeighborsClassifier(n_neighbors=1,p=2,metric="minkowski")
pipe1 = Pipeline([['sc',StandardScaler()],['clf',clf1]])
pipe3 = Pipeline([['sc',StandardScaler()],['clf',clf3]])
clf_labels = ['Logistic regression','Decision tree','KNN']
print('10-folds cross validation :\n')
for clf,label in zip([pipe1,clf2,pipe3],clf_labels):scores = cross_val_score(estimator=clf,X=X_train,y=y_train,cv=10,scoring='roc_auc')print("ROC AUC: %0.2f(+/- %0.2f)[%s]"%(scores.mean(),scores.std(),label))

输出结果

我们使用MajorityVoteClassifier集成:

## 我们使用MajorityVoteClassifier集成:
from sklearn.ensemble import VotingClassifier
mv_clf = VotingClassifier(estimators=[('pipe1',pipe1),('clf2',clf2),('pipe3',pipe3)],voting='soft')
clf_labels += ['MajorityVoteClassifier']
all_clf = [pipe1,clf2,pipe3,mv_clf]
print('10-folds cross validation :\n')
for clf,label in zip(all_clf,clf_labels):scores = cross_val_score(estimator=clf,X=X_train,y=y_train,cv=10,scoring='roc_auc')print("ROC AUC: %0.2f(+/- %0.2f)[%s]"%(scores.mean(),scores.std(),label))
## 对比下面结果,可以得知多数投票方式的分类算法,抗差能力更强。

输出结果

使用ROC曲线评估集成分类器:

## 使用ROC曲线评估集成分类器
from sklearn.metrics import roc_curve
from sklearn.metrics import auccolors = ['black','orange','blue','green']
linestyles = [':','--','-.','-']
plt.figure(figsize=(10,6))
for clf,label,clr,ls in zip(all_clf,clf_labels,colors,linestyles):y_pred = clf.fit(X_train,y_train).predict_proba(X_test)[:,1]fpr,tpr,trhresholds = roc_curve(y_true=y_test,y_score=y_pred)roc_auc = auc(x=fpr,y=tpr)plt.plot(fpr,tpr,color=clr,linestyle=ls,label='%s (auc=%0.2f)'%(label,roc_auc))
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],linestyle='--',color='gray',linewidth=2)
plt.xlim([-0.1,1.1])
plt.ylim([-0.1,1.1])
plt.xlabel('False positive rate (FPR)')
plt.xlabel('True positive rate (TPR)')
plt.show()

输出结果

4.集成学习之0.Voting相关推荐

  1. 集成学习 hard/soft Voting,Bagging/Pasting,oob 随机森林

    文章目录 一.什么是集成学习? 1.hard Voting 2.soft Voting 二.Bagging 和Pasting 1.引入Bagging和Pasting 2.代码举例 三.oob和关于Ba ...

  2. 集成学习voting Classifier在sklearn中的实现

    机器学习的算法有很多,对于每一种机器学习算法,考虑问题的方式都略微有所不同,所以对于同一个问题,不同的算法可能会给出不同的结果,那么在这种情况下,我们选择哪个算法的结果作为最终结果呢?那么此时,我们完 ...

  3. 机器学习系列笔记十三: 集成学习/模型聚合

    机器学习系列笔记十三: 集成学习/模型聚合 文章目录 机器学习系列笔记十三: 集成学习/模型聚合 什么是集成学习 Voting Hard Voting 模拟实现Hard Voting 集成学习 使用V ...

  4. 集成学习-3.voting与bagging

    参考文献ensemble-learning 1. 投票法的思路 投票法是集成学习中常用的技巧,可以帮助我们提高模型的泛化能力,减少模型的错误率.举个例子,在航空航天领域,每个零件发出的电信号都对航空器 ...

  5. (七)集成学习中-投票法Voting

    集成学习第一法宝:投票! 参考:DataWhale教程链接 集成学习(上)所有Task: (一)集成学习上--机器学习三大任务 (二)集成学习上--回归模型 (三)集成学习上--偏差与方差 (四)集成 ...

  6. 集成学习1——voting、baggingstacking

    文章目录 一.投票法与bagging 1.1 投票法的原理分析 1.2 Voting案例分析 1.3 bagging的原理分析 1.4 决策树和随机森林 1.5 bagging案例分析 二.stack ...

  7. 集成学习-Voting

    一.什么是集成学习 集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法.一般情况下,集成学习中的多个学习器都是同质的" ...

  8. kaggle 泰坦尼克项目实战(详细代码分享)——集成学习Soft voting

    顺利注册完kaggle之后,终于可以开始上手撸项目啦! 先从大名鼎鼎的泰坦尼克号开始吧! 尽管网上有很多大神进行了"入门级别"的代码分享讲解,但我看了一轮仍然觉得对新手不够友好. ...

  9. 机器学习集成学习与模型融合!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle ...

最新文章

  1. 爬虫之lxml模块中etree.tostring函数的使用
  2. SpringMVC实现简单登录
  3. Scala入门到精通——第八节 包和引入
  4. oracle逻辑结构(2)
  5. 机器学习速成课程 | 练习 | Google Development——编程练习:合成特征和离群值
  6. mysql 可逆编码,简单明白彻底解决 MySQL 中文编码问题
  7. selenium-webdriver——如何在启动firefox时加载扩展
  8. JMeter java.lang.OutOfMemoryError: PermGen space错误
  9. ios sinaweibo 客户端(二)
  10. java has a 关系,Java组成(has-a)关系澄清
  11. Xray扫描器SQL注入检测:sqldet
  12. NSLocale中常用的语言代码对照表
  13. 怎么用优动漫PAINT做出色彩的朦胧感?
  14. echarts:x轴文字竖排显示
  15. MySQL的用户密码过期password_expired功能
  16. 学了很多理论,你为什么还是做不好一名数据分析师?
  17. JAVA设计模式——第 8 章 适配器模式【Adapter Pattern】(转)
  18. 数据仓库开发之路之一--准备工作
  19. Lenet、Alexnet 、VGG、 GoogleNet、ResNet模型
  20. 中段尾段全段什么意思_什么头什么尾?汽车改装排气时有的换全段,中尾段,尾段,分别都有什么效果?...

热门文章

  1. 哪所大学教php_世界大学排行榜盘点:THE排名中清华北大雄踞亚洲高校前2!内地大学十强分别是…...
  2. 2019.10.13作业总结
  3. v-rep仿真之键盘控制机械臂末端移动
  4. Linux技巧--删除某列
  5. Flink流批一体从入门到入土(源码)
  6. 【MATLAB教程案例86】通过matlab实现lorenz混沌系统
  7. linux下添加网口,linux下ioctl操作网络接口
  8. 下列适合作为服务器操作系统的是,江苏专转本计算机真题 含答案
  9. 纸上谈兵: 图 (graph)
  10. java入口函数_Java 函数入口