机器学习基础:模型集成/集成学习

目录

1. 什么是集成学习

1.1 分类器集成的结果

1.2 构造基分类器的三种方法

1.3 多个基分类器如何进行分类

2. 分析预测模型的泛化误差

3. 分类器集成方法

3.1 装袋法 Bagging(实例操作)

3.2 随机森林法 Random Forest(特征操作)

3.3 演进法 Boosting(算法操作)

3.3.1 演进法实例:AdaBoost

3.3.2 装袋法/随机森林和演进法对比

3.4 堆叠法 Stacking


1. 什么是集成学习

集成学习原名为Classifier combination / ensemble learning,它是根据训练数据构造一组基分类器(base classifier),通过聚合每个基分类器的输出来进行分类。

基分类器,就是一个小的分类器,单个基分类器的性能取决于它选择的分类算法和训练集。

对于单个性能比较弱的基分类器,我们称为弱分类器

对于单个性能比较强的基分类器,我们称为强分类器

多个基分类器集成的思想源于下列直觉

  • 考虑到几个基分类器的分类意见,而不是仅仅依靠一个基分类器的意见 。
  • 许多弱分类器的组合至少可以和一个强分类器一样好。
  • 一些强分类器的组合(通常)至少和基分类器中最好的一个一样好。

1.1 分类器集成的结果

多个分类器集成后的性能一定更好吗?我们带着这个疑问来看下面的例子:

C_{1}, C_{2}, C_{3} 分别代表了3个基分类器,C^{*} 表示的是三个分类器的结合的最终结果:

由结果可以看出,多个基分类器的集合不一定犹豫单个基分类器的性能,那么:

什么时候选择集成呢?

  • 基础分类器不会犯同样的错误。
  • 每个基础分类器都是相当准确的。

1.2 构造基分类器的三种方法

实例操作:通过抽样产生多个训练集,并在每个数据集上训练一个基础分类器。

特征操作:通过不同的特征子集生成多个训练集,并在每个数据集上训练一个基础分类器。

算法操作:半随机地调整给定算法中的内部参数,在给定的数据集上生成多个基础分类器。

1.3 多个基分类器如何进行分类

在多个基分类器上进行分类的最简单手段是投票

对于离散类,在测试集上运行多个基分类器,并选择由最多基分类器预测的类(少数服从多数)。例如一个二分类的数据集,label=0/1,构造了5个基分类器,对于某个样本有三个基分类器的输出结果是1, 两个是0那么这个时候,总和来看结果就应该是1。

对于连续数值类,对我们基分类器预测的数字进行平均,将平均数作为最终的预测结果。

2. 分析预测模型的泛化误差

从模型角度看:

  • Bias(偏置):衡量一个分类器进行错误预测的趋势。
  • Variance(变异度):衡量一个分类器预测结果的偏离程度。

如果一个模型有更小的BiasVariance 就代表这个模型的泛化性能很好。

3. 分类器集成方法

3.1 装袋法 Bagging(实例操作)

Bagging = bootstrap aggregating(自举汇聚法


装袋法思想源于数据越多,性能越好的直觉判断。


具体方法

通过随机抽样与替换相结合的方式构建新的数据集 。

将原始数据集进行有放回的随机采样N次,得到了N个数据集,针对这些数据集一共产生N个不同的基分类器。对于这N个分类器,让他们采用投票法来决定最终的分类结果。


例子:


袋装法存在的问题

因为袋装法是有放回的随机采样N次,那就有可能有些样本可能永远不会被随机到。因为N个样本,每个样本每次被

$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值