机器学习(十三)——集成学习

笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据助跑每一个人,欢迎直筒们关注我的公众号,大家一起讨论数据中的那些有趣的事情。

我的公众号为:livandata

Ø 集成算法分为:

Ø  bagging算法(套袋法):

   从原始样本集中使用随机抽样方法有放回的抽取n个训练样本,共进行k轮抽取,得到k个训练集(独立且等量);

   对于k个训练集,训练k个模型,具体的模型视具体情况而定(可以是knn、决策树等);

通过对训练样本重新采样的方法得到不同的训练样本集,在这些新的训练样本集上分别训练学习器,最终合并每一个学习器的结果,作为最终的学习结果,Bagging方法的具体过程如下图所示:

在Bagging方法中,最重要的算法为随机森林Random Forest算法。由以上的图中可以看出,在Bagging方法中,b 个学习器之间彼此是相互独立的,这样的特点使得Bagging方法更容易并行。

Ø  bagging+决策树=随机森林;

常用的Bagging方法为——随机森林:

Ø  假设有N个样本,有放回的取样,构建子决策树;

Ø  每个样本有M个属性,随机选取一部分属性,作为决策树的分枝属性;

Ø  对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数等进行分裂;

Ø  每棵树都这样分裂,直到所有样本都属于同一类;

Ø  将多个树组合成随机森林。对于分类问题,按照多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果;

优点:

         准确度高、抗噪能力强、能处理高纬度、容易并行化;

缺点:

         训练时间、空间较多,随机森林类似于黑盒测试;

Ø  Boosting算法(提升法):

   对训练集中的每个样本建立权值w,表示对每个样本的关注度,当某个样本被误分类的概率很高时,需要加大对该样本的权值;

   进行迭代的过程中,每一步迭代都是一个弱分类器,需要用某种策略将其组合,作为最终模型;

学习器之间是存在先后顺序的,同时,每一个样本是有权重的,初始时,每一个样本的权重是相等的。首先,第1个学习器对训练样本进行学习,当学习完成后,增大错误样本的权重,同时减小正确样本的权重,再利用第2个学习器对其进行学习,依次进行下去,最终得到b个学习器,最终,合并这b个学习器的结果,同时,与Bagging中不同的是,每一个学习器的权重也是不一样的。Boosting方法的具体过程如下图所示:

在Boosting方法中,最重要的方法包括:AdaBoostGBDT

Ø  AdaBoost+决策树=提升树;

Ø  Gradient Boosting+决策树=GBDT;

首先介绍一下GDBT

GBDT的具体步骤为:

其次介绍一下AdaBoost

ü  权重D(t)是指m个样本的权重,共m个;

ü  共循环T次,共有T组;

 

 

 

 

                 

       

       

最后比较一下XGBoost

xgboost算法的步骤和GB基本相同,都是首先初始化为一个常数,gb是根据一阶导数ri,xgboost是根据一阶导数gi和二阶导数hi,迭代生成基学习器,相加更新学习器。

xgboost的优势:

Ø  正则化

标准GBM的实现没有像XGBoost这样的正则化步骤。正则化对减少过拟合也是有帮助的。 
实际上,XGBoost以“正则化提升(regularized boosting)”技术而闻名。

Ø  并行处理

XGBoost可以实现并行处理,相比GBM有了速度的飞跃,LightGBM也是微软最新推出的一个速度提升的算法。 XGBoost也支持Hadoop实现。

Ø  高度的灵活性

XGBoost 允许用户定义自定义优化目标和评价标准。

Ø  缺失值处理

XGBoost内置处理缺失值的规则。用户需要提供一个和其它样本不同的值,然后把它作为一个参数传进去,以此来作为缺失值的取值。XGBoost在不同节点遇到缺失值时采用不同的处理方法,并且会学习未来遇到缺失值时的处理方法。

Ø  剪枝

当分裂时遇到一个负损失时,GBM会停止分裂。因此GBM实际上是一个贪心算法。XGBoost会一直分裂到指定的最大深度(max_depth),然后回过头来剪枝。如果某个节点之后不再有正值,它会去除这个分裂。 
这种做法的优点,当一个负损失(如-2)后面有个正损失(如+10)的时候,就显现出来了。GBM会在-2处停下来,因为它遇到了一个负值。但是XGBoost会继续分裂,然后发现这两个分裂综合起来会得到+8,因此会保留这两个分裂。

Ø  内置交叉验证

XGBoost允许在每一轮boosting迭代中使用交叉验证。因此,可以方便地获得最优boosting迭代次数。 
而GBM使用网格搜索,只能检测有限个值。

Ø  在已有的模型基础上继续

XGBoost可以在上一轮的结果上继续训练。 
sklearn中的GBM的实现也有这个功能,两种算法在这一点上是一致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值