集成学习bagging怎么用error in 1:nrow argument of length 0

集成学习——Boosting和Bagging
集成学习——Boosting和Bagging
[摘要:link: http://m.blog.csdn.net/blog/fenghuangdesire/
根基头脑:若是单个分类器显示的很好,那末为何没有实用多个分类器呢?
经过散成进修能够进步团体的泛化]
link:&http://m.blog.csdn.net/blog/fenghuangdesire/
基本思想:如果单个分类器表现的很好,那么为什么不适用多个分类器呢?
通过集成学习可以提高整体的泛化能力,但是这种提高是有条件的:
(1)分类器之间应该有差异性;
(2)每个分类器的精度必须大于0.5;
如果使用的分类器没有差异,那么集成起来的分类结果是没有变化的。如下图所示,分类器的精度p&0.5,随着集成规模的增加,分类精度不断下降;如果精度大于p&0.5,那么最终分类精度可以趋向于1。
接下来需要解决的问题是如何获取多个独立的分类器呢?
我们首先想到的是用不同的机器学习算法训练模型,比如决策树、k-NN、神经网络、梯度下降、贝叶斯等等,但是这些分类器并不是独立的,它们会犯相同的错误,因为许多分类器是线性模型,它们最终的投票(voting)不会改进模型的预测结果。
既然不同的分类器不适用,那么可以尝试将数据分成几部分,每个部分的数据训练一个模型。这样做的优点是不容易出现过拟合,缺点是数据量不足导致训练出来的模型泛化能力较差。
下面介绍两种比较实用的方法Bagging和Boosting。
Bagging算法
Bagging是通过组合随机生成的训练集而改进分类的集成算法。Bagging每次训练数据时只使用训练集中的某个子集作为当前训练集(有放回随机抽样),每一个训练样本在某个训练集中可以多次或不出现,经过T次训练后,可得到T个不同的分类器。对一个测试样例进行分类时,分别调用这T个分类器,得到T个分类结果。最后把这T个分类结果中出现次数多的类赋予测试样例。这种抽样的方法叫做bootstrap,就是利用有限的样本资料经由多次重复抽样,重新建立起足以代表原始样本分布之新样本。
Bagging算法基本步骤:
因为是随机抽样,那这样的抽样只有63%的样本是原始数据集的。
Bagging的优势在于当原始样本中有噪声数据时,通过bagging抽样,那么就有1/3的噪声样本不会被训练。对于受噪声影响的分类器,bagging对模型是有帮助的。所以说bagging可以降低模型的方差,不容易受噪声的影响,广泛应用在不稳定的模型,或者倾向于过拟合的模型。
Boosting算法
Boosting算法指将弱学习算法组合成强学习算法,它的思想起源于Valiant提出的PAC(Probably Approximately Correct)学习模型。
基本思想:不同的训练集是通过调整每个样本对应的权重实现的,不同的权重对应不同的样本分布,而这个权重为分类器不断增加对错分样本的重视程度。
1. 首先赋予每个训练样本相同的初始化权重,在此训练样本分布下训练出一个弱分类器;
2. 利用该弱分类器更新每个样本的权重,分类错误的样本认为是分类困难样本,权重增加,反之权重降低,得到一个新的样本分布;
3. 在新的样本分布下,在训练一个新的弱分类器,并且更新样本权重,重复以上过程T次,得到T个弱分类器。
通过改变样本分布,使得分类器聚集在那些很难分的样本上,对那些容易错分的数据加强学习,增加错分数据的权重。这样错分的数据再下一轮的迭代就有更大的作用(对错分数据进行惩罚)。对于这些权重,一方面可以使用它们作为抽样分布,进行对数据的抽样;另一方面,可以使用权值学习有利于高权重样本的分类器,把一个弱分类器提升为一个强分类器。
Boosting处理过程
Boosting算法通过权重投票的方式将T个弱分类器组合成一个强分类器。只要弱分类器的分类精度高于50%,将其组合到强分类器里,会逐渐降低强分类器的分类误差。
由于Boosting将注意力集中在难分的样本上,使得它对训练样本的噪声非常敏感,主要任务集中在噪声样本上,从而影响最终的分类性能。
对于Boosting来说,有两个问题需要回答:一是在每一轮如何如何改变训练数据的概率分布;二是如何将多个弱分类器组合成一个强分类器。而且存在一个重大的缺陷:该分类算法要求预先知道弱分类器识别准确率的下限。
AdaBoosting算法
针对上述Boosting存在的缺陷和问题,Freund和Schapire根据在线分配算法理论提出了AdaBoost算法,是一种改进的Boosting分类算法。
(1)提高那些被前几轮弱分类器线性组成的分类器错误分类的的样本的权值,这样做能够将每次训练的焦点集中在比较难分的训练样本上;
(2)将弱分类器有机地集成起来,使用加权投票机制代替平均投票机制,从而使识别准确率较高的弱分类器具有较大的权重,使其在表决中起较大的作用,相反,识别准确率较低的分类器具有较小的权重,使其在表决中起较小的作用。
与Boosting分类算法相比,AdaBoost算法不需要预先获得弱分类算法识别准确率的下限(弱分类器的误差),只需关注于所有弱分类算法的分类精度(分类准确率略大于50%)。
AdaBoosting算法
(x1,y1), …, (xm,ym),其中 xi∈X, yi∈Y={-1, +1}
Dt(i):样本xi在第t次迭代的权重,D1(i)=1/m
ht(X):弱分类器Ct训练得到的判别函数,ht:X-&{-1, +1}
εt:ht(X)的错误率,加权分类误差(weighted error)
αt:分类器的系数,根据误差计算,误差越小,权重越大。
上面权重Dt+1(i)的更新是基于前一步的权重Dt(i),而非局域全局更新。
AdaBoost分类算法是一种自适应提升的方法,由于训练的过程是重复使用相同的训练集,因而不要求数据集很大,其自身就可以组合任意数量的基分类器。在AdaBoost算法中,尽管不同的基分类器使用的训练集稍有差异,但这种差异是随机选择造成的,所不同的是,这种差异是前一个基分类器的误差函数。而提升的过程是针对一个特定问题的实际性能,显然这就依赖于具体的数据和单个基分类器的性能。因此,训练的过程需要有充足的训练数据,并且基分类器应当是弱的但又不至于太弱(即分类准确率略大于50%),而提升的过程对噪声和离群点的干扰尤为明显。
Boosting与Bagging(bootstrap aggregating)的不同之处:
1、Bagging的训练集是随机的,以独立同分布选取的训练样本子集训练弱分类器,而Boosting训练集的选择不是独立的,每一次选择的训练集都依赖于上一次学习的结果,根据错误率取样,因此Boosting的分类精度在大多数数据集中要优于Bagging,但是在有些数据集中,由于过拟合的原因,Boosting的精度会退化。
2、Bagging的每个预测函数(即弱假设)没有权重,而Boosting根据每一次训练的训练误差得到该次预测函数的权重;
3、Bagging的各个预测函数可以并行生成,而Boosting的只能顺序生成。
参考资料:
Ensemble methods. Bagging and Boosting
Bagging, boosting and stacking in machine learning
HITSCIR-TMzkli-李泽魁 Bagging &Boosting
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
IThao123周刊后使用快捷导航没有帐号?
查看: 3272|回复: 0
adabag提示错误“argument of length 0”的解决方法
高级会员, 积分 901, 距离下一级还需 99 积分
论坛徽章:8
尝试对kyphosis数据做bagging的时候,R返回了如下错误信息:
Error in 1:nrow(object$splits) : argument of length 0
Google之,大概意思就是默认参数不允许生成决策树的深度为0。我是没太明白怎么会违反这条限制,深度为0的还叫决策树吗。
不管怎样,有解决方法就行。修改mfinal值,并使用control参数将minsplit置为0即可。用下列语句通过:
bagging(Kyphosis~., data=kyphosis, control=(minsplit=0), mfinal=10)
不过还有个遗留问题:虽在R中运行通过,但放在knitr RMarkDown文件中编译成网页时仍然报错。目前还摸不到头脑。
声明:本帖仅为数据挖掘的学术交流分享。与我司业务无任何关系。
扫一扫加入本版微信群集成学习:Bagging与随机森林
想要得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立,但是相互独立很难做到,我们可以做的是使基学习器尽可能具有较大的差异。
Bagging是并行式集成学习方法的著名代表,它是基于自助采样法(有放回的取样)来提高学习器泛化能力的一种很高效的集成学习方法。
Bagging的策略:
从样本集D中用Bootstrap采样选出n个样本,执行m次,选出m个样本子集{D1,D2,...,Dm}
在所有属性上,分别对应这m个样本子集建立m个学习器{h1(x),h2(x),...,hm(x)}
将这m个学习器放在各自的训练数据上进行学习
通过投票法或平均法对这m个学习器进行结合
由于Bagging采用的是Bootstrap采样,那么基学习器大概只使用了初始训练集中越63.2%的样本,剩下越36.8%的样本可以用作验证集来对泛化性能进行估计。
随机森林(RandomForest)是以决策树为基学习器构建Bagging集成的基础上进一步在决策树的训练过程中引入了随机属性选择。
随机森林的策略
从样本集中用Bootstrap采样选出n个样本
在树的每个节点上,从所有属性中随机选择k个属性,选择出一个最佳分割属性作为节点,建立决策树,k一般选为log2d,d表示属性的总个数
重复以上两步m次,建立m棵决策数
这m棵决策树形成RandomForest
随机森林中基学习器的多样性不仅来自样本扰动,还来自属性的扰动,因此最终集成的泛华性能有显著的提高。
Bagging对回归任务,或者对数值型输出,常见的组合策略是使用平均法。
简单平均法
H(x)=1TΣTi=1hi(x)
加权平均法
H(x)=ΣTi=1wihi(x)
其中wi是个体学习器hi的权值,通常要求wi≥0,ΣTi=1wi=1
现实任务中的训练样本通常不充分或者是存在噪声的,这会导致我们学习得到的权值不完全可靠,对与规模较大的集成来说,所需要学习的权值较多,又可能会导致过拟合问题,因此加权平均法未必一定优于简单平均法
Bagging对分类任务,常见的组合策略是使用投票法。设学习器hi将从类别标记集合{c1,c2,...,cN}中预测出一个标记,我们将hi在样本x上的预测输出表示为一个N维向量(h1i(x);h2i(x);...;hNi(x)),其中hji(x)是hi在类别cj上的输出。
绝对多数投票法
f(n)=???cj,reject,if&ΣTi=1hji(x)&0.5ΣNk=1ΣTi=1hki(x);otherwise
即若某标记得票过半数,则预测为该标记,否则拒绝预测。
相对多数投票法
H(x)=cargmaxc∑Tt=1hji(x)
即预测为得票最多的标记,若有多个标记得最高票,则从中随机选取一个
加权投票法
H(x)=cargmaxc∑Tt=1wihji(x)
与加权平均法类似,其中wi是个体学习器hi的权值,通常要求wi≥0,ΣTi=1wi=1
当训练数据很多的时候,学习法是一种很好的策略,Stacking 是学习法的典型代表,我们将个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。
从初始的数据集训练出初级学习器,然后生成一个数据集,即初级学习器的输出来训练次级学习器,初级学习器的输出被当作样例输入的特征 ,初始样本的标记仍当作样本标记
注意事项:
次级训练集是利用初级学习器参数的,若直接使用初级学习器的训练集产生次级训练集,会有较高的过拟合风险,因此一般是通过使用交叉验证或留一法的方式用训练初级学习器为使用的样本来参数次级学习器的训练样本。
看过本文的人也看了:
我要留言技术领域:
收藏提示你已经自动关注本知识库了哦!
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信