Q:有些学习器强,有些学习器弱,有没有方法让弱的学习器战胜强的学习器?
A:
所谓“弱学习器”,就是指性能比起随机猜测高一点的学习器,比如弱分类器就是指分类准确率比50%高一点的分类器。俗话说:“三个臭皮匠,赛过诸葛亮”。我们可以通过某种“合作制度”,使得多个弱学习器结合起来一起进行分类(回归),获得甚至高于强学习器的学习性能。这杯成为集成学习(ensemble learning)。
</br>
Q:用于集成学习的每个个体学习器如何生成?
A:
集成学习的个体学习器有两类生成方式:串行生成和并行生成。前者值学习器一个接一个生成,后一个个体学习器基于以前一个的情况生成;后者是所有用到的学习器一起生成,不分先后。显然串行方式相对来说比并行方式更耗时间。串行生成的代表算法是boosting族算法中的Adaboost,并行生成的代表算法是bagging算法,而其变体算法random forest 最为著名和常用。
</br>
Q:Adaboost算法的基本思想是怎样的?
A:
首先我们想一下现实生活中的经历——我们在学习的时候,尤其是初高中学习模式中,总是会有听课-测验-总结测验结果-重点学习测验中做错的知识点这样的学习模式。
boosting族算法的基本思想和上面的学习模式很像。boosting算法要做的事情就是用同一个训练数据集,训练出n个弱学习器,然后吧这n个弱学习器整合成一个强学习器。其学习过程也是:首先根据原始的数据集训练出第一个学习器,然后根据学习器的学习结果,看看这个学习器在哪些样本上犯了错。然后下一轮训练时给在上一轮犯错的样本机遇更多的关注,训练出一个新的学习器。
Adaboost是boosting族算法中著名的算法之一。算法会对训练数据集里每一个样本赋予一个权值wi(0<wi<1)。然后开始了n轮的训练,第一轮的话死后每个样本的权值都是均等的,假设训练数据集有m个样本,则每个样本权值都是1/m。用这些数据和权值可以训练出第一个学习器(一般是决策树算法)。
每一个学习器训练出来或,计算这个学习器的加权错误率。所谓加权错误率其实就是用该学习器对训练集数据进行测试。
分类任务的话,错误率就是分类错误的样本的权值的和。

回归任务的话,错误率的计算稍微麻烦点。首先计算出预测数值与实际数值之差中最大的差值。然后计算各个样本的相对误差值(多种选择)。最后的误差率就是各个样本的相对误差值与权值相乘后的和。

计算出该轮学习器的误差率后,可以确定该学习器在最后的n个学习器中的话语权,即这个学习器的判断结果在所有个体学习器中的权重。
分类任务的话

回归任务的话

确定了该学习器的话语权后,既要着手为训练下一个学习器做准备,即根据该学习器的表现,更新数据集中各个样本的权值,使下一轮的训练更多关注那些该轮测试中判断错误的样本。


如此循环n轮后,获得n个学习器,最后吧这n个学习器用投票发或者平均法结合起来,就得到一个最终的强学习器了。


过完年更多关于Adaboost算法的知识,可以<a href="http://www.cnblogs.com/pinard/p/6133937.html" >看看这篇博文</a>。
</br>
Q:bagging和random forest算法的大致内容如何?
A:
bagging算法的思想很简单——假设现在有含m个样本的样本数据集D。对D进行m次有放回抽样,得到一个含m个样本的训练数据集T。根据概率,D中有约63%的样本被抽到T中(部分会重复出现)。进行数次这样的操作,得到数个训练集T1、T2、T3、···、Tn。用这n个训练集可以训练出n个不同的个体学习器。
random forest算法是机遇bagging算法的扩展——以决策树为个体学习器的集成学习器算法。除此以外,一般的,单个的决策树在构建树的节点时,会在所有可选属性中选择最优的属性作为节点的划分属性。而随机森林中的决策树在构建树的节点时,会先在所有可选属性中随机选择k个属性出来,然后选出这k个属性中最优的属性作为当前节点的划分属性。显然,随机森林中的每一棵性能都比一般的决策树性能弱,但是许多课这样的决策树形成森林后,其总体性能则大大强于一般的决策树了。
Q:现在有了多个个体学习器,有那些“合作规则”让多个弱学习器一起工作?
A:
对于分类任务,最简单的就是投票法,看看那一个类别得到更多学习器的支持,就把待分类任务归到那一个类别,如果同时有两个或以上类别得到同样多票数,则从这几个类别中随机选一个,这叫相对投票法。也有绝对投票法,即把待分类样本归属到得票多于半数的那一个类别。如果没有一个类别得票多于半数,则拒绝本次预测,即待分类样本不归属到任何一个类别。另外还有加权投票法,给每一个学习器加一个权值,表示各个学习器票数的重要度,再进行绝对或相对投票。
对于预测任务,或者说输出是连续值的任务,最简单的是用平均法*,有简单平均法,即各个学习器的结果直接取平均;也可以用加权平均法,同样给各个个体学习器加一个权值,然后将各个结果乘上相应权值再取平均。
当数据量足够多是,可以考虑更加强大的合作规则——学习法,亦即把各个个体学习器的输出结果当作一个新的数据集,通过一个新的学习算法得到一个新的学习器。如果把前两种合作规则看作是一群人讨论得出结果,那么“学习法”就是一群人把他们的知识经验全部传授给一个学生,由这个接受了多人功力的学生(实际上就是一个强学习器了)来做判断。
学习法最典型的算法是stacking算法。假设现在有一个数据集D,先把数据集分成两部分,一部分用来训练初级学习器(个体学习器),可以用于boosting或者bagging的训练方式。另一部分则作为输入,喂给训练出来的每个个体学习器,从而得到输出,形成一个新的数据集——这个新的数据集中每个样本有n个属性和1个标记,对应n个个体学习器的输出结果,以及原来的喂给个体学习器的数据集中每个样本的标记。
用这个新的数据集作为训练集,训练出一个新的学习器,这个学习器就是最终的集成学习器。这个最终的学习其一般使用线性回归算法来训练。
网友评论