机器学习实战之AdaBoost元算法

今天学习的机器学习算法不是一个单独的算法,我们称之为元算法或集成算法(Ensemble)。其实就是对其他算法进行组合的一种方式。俗话说的好:“三个臭皮匠,赛过诸葛亮”。集成算法有多种形式:对同一数据集,使用多个算法,通过投票或者平均等方法获得最后的预测模型;同一算法在不同设置下的集成;同一算法在多个不同实例下的集成。本文着重讲解最后一种集成算法。

bagging

如果训练集有n个样本,我们随机抽取S次,每次有放回的获取m个样本,用某个单独的算法对S个数据集(每个数据集有m个样本)进行训练,这样就可以获得S个分类器。最后通过投票箱来获取最后的结果(少数服从多数的原则)。这就是bagging方法的核心思想,如图所示。

bagging中有个常用的方法,叫随机森林(random forest),该算法基于决策树,不仅对数据随机化,也对特征随机化。

数据的随机化:应用bootstrap方法有放回地随机抽取k个新的自助样本集。

特征随机化:n个特征,每棵树随机选择m个特征划分数据集。

每棵树无限生长,最后依旧通过投票箱来获取最后的结果。

boosting

boosting方法在模型选择方面和bagging一样:选择单个机器学习算法。但boosting方法是先在原数据集中训练一个分类器,然后将前一个分类器没能完美分类的数据重新赋权重(weight),用新的权重数据再训练出一个分类器,以此循环,最终的分类结果由加权投票决定。所以:boosting是串行算法(必须依赖上一个分类器),而bagging是并行算法(可以同时进行);boosting的分类器权重不同,bagging相同(下文中详细讲解)。

boosting也有很多版本,本文只讲解AdaBoost(自适应boosting)方法的原理和代码实践。如图所示,为AdaBoost方法的原理示意图。

首先,训练样本赋权重,构成向量D(初始值相等,如100个数据,那每个数据权重为1/100)。

在该数据上训练一个弱分类器并计算错误率和该分类器的权重值(alpha)。

基于该alpha值重新计算权重(分错的样本权重变大,分对的权重变小)。

循环2,3步,但完成给定的迭代次数或者错误阈值时,停止循环。

最终的分类结果由加权投票决定。

alpha和D的计算见下图(来源于机器学习实战):

AdaBoost方法实践

数据来源

数据通过代码创建:

弱决策树

该数据有两个特征,我们只用一个特征进行分类(弱分类器),然后选择精度最高的分类器。

AdaBoost算法

该函数用于构造多棵树,并保存每棵树的信息。

算法优缺点

优点:精度高

缺点:容易过拟合

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180615G12GTD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券