机器学习算法总结(三)——集成学习(Adaboost、RandomForest)

1、集成学习概述

  集成学习算法可以说是现在最火爆的机器学习算法,参加过Kaggle比赛的同学应该都领略过集成算法的强大。集成算法本身不是一个单独的机器学习算法,而是通过将基于其他的机器学习算法构建多个学习器并集成到一起。集成算法可以分为同质集成和异质集成,同质集成是值集成算法中的个体学习器都是同一类型的学习器,比如都是决策树;异质集成是集成算法中的个体学习器由不同类型的学习器组成的。(目前比较流行的集成算法都是同质算法,而且基本都是基于决策树或者神经网络的)

  集成算法是由多个弱学习器组成的算法,而对于这些弱学习器我们希望每个学习器的具有较好的准确性、而且各个学习器之间又存在较大的差异性,这样的集成算法才会有较好的结果,然而实际上准确性和多样性往往是相互冲突的,这就需要我们去找到较好的临界点来保证集成算法的效果。根据个体学习器的生成方式不同,我们可以将集成算法分成两类:

  1)个体学习器之间存在强依赖关系,必须串行化生成的序列化方法,这一类的代表是Boosting(常见的算法有Adaboost、GBDT);

  2)个体学习器之间不存在强依赖关系,可以并行化生成每个个体学习器,这一类的代表是Bagging(常见的算法有RandomForest)。

  接下来我们来介绍这两种不同的集成算法。

2、集成算法—Boosting

  对于分类问题,给定一个训练集,求得一个弱学习器要比求一个强学习器容易得多,Boosting方法就是从弱学习器出发,反复学习而得到一系列弱学习器,然后组合这些弱学习器,构成一个强学习器。Boosting算法的工作机制可以概括为:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的样本受到更多的关注(通过施加权重来控制),然后基于调整后的样本集训练下一个基学习器,如此反复进行,直到学得的基学习器的个数达到设定的个数T(基学习器的个数是我们需要调试的超参,通过交叉验证来选择),最终对这T个基学习器根据他们的预测表现来施加不同的权重并结合在一起构成我们的强学习器。

  Boosting算法最具代表的是Adaboost算法,关于Adaboost算法的具体流程如下:

  1)初始化训练集的权值分布,每个样本的权值一样

  

  2)对于第m个基学习器,使用权值分布Dm的训练数据集训练模型,得到基学习器Gm

  

  计算Gm(x)在训练数据集上的分类误差率

  

  计算Gm(x)的系数αm,该系数最后会用来作为基学习器的权重

  

  更新训练数据集的权值分布,求得Dm+1

  

  其中Zm是规范场因子,其表达式为

  

  3)构建基学习器的线性组合

  

  则最终的学习器模型如下

  

3、集成算法—Bagging

  Bagging算法的核心是通过在原始数据集上进行采样,获得多份不同的样本集,用这些样本集来训练基学习器。第一节中我们提到基学习器需要平衡准确性和多样性,因此我们所采集的样本需要满足这两点,Bagging采用自助采样法(Bootstrap)进行采样,自助采样法的规则如下:给定包含m的样本的数据集,我们先随机从中抽取一个样本出来,再将该样本放回,以便在下一次仍有机会抽到,这样经过m次随机采样,我们就可以获得m的样本的样本集(这样的样本集中约含有原始数据集中的63.2%的样本),按照这种方式抽取出T份样本集出来,用这T份样本集训练出T个基学习器,在预测时根据这T个基学习器预测的结果,通常采用投票法来决定最终的输出。Bagging与Adaboost只适用于二分类问题不同,可以不经修改的用于多分类问题。

  Bagging算法中最常见的算法就是RandomForest(随机森林)算法,RandomForest是Bagging的一种变体,在Bagging的基础上引进了属性干扰这一策略,主要是用来提高基学习器之间的多样性,具体规则:传统的决策树是在整个属性集上选择最优的属性来划分样本集合,而RandomForest先在属性集上随机选取k个属性组成一个子属性集,然后在这个子属性集上选择最优的属性来划分样本集合,这里的参数k控制了随机性的引入程度,一般情况下推荐k=log2d,d为属性集的大小。

4、集成学习的输出方式

  最终的强学习器的输出结果是和每个弱学习器相关的,但是对于这些弱学习器的输出值,我们以什么样的方式整合输出呢?

  1)平均法

  对于数值类的回归问题,通常使用的方式是平均法,也即是对每个弱学习器的输出加和取平均值,将该平均值作为最后的输出,当然有的时候会给每个学习器带上权重,此时就是加权平均获得最终的输出值。

  2)投票法

  对于分类问题的输出方式常采用投票法,最简单的投票方式就是取弱学习器中预测最多的那一类作为我们的输出值,其次严格一点的投票方式是不但要输出预测最多的那一类的值,且该类的值要占到预测的值的一半以上,最后还有对每个弱学习器赋予权重,对于最终的投票计算会乘以对应的权重(比如选举时班长的一票顶五票,而普通学生一票就只是一票)。

  3)学习法

  对于平均法和投票法相对比较简单,有时候在预测时可能存在误差,于是就衍生出了学习法,例如stacking,当使用stacking时是将所有弱学习器的输出作为输入,在这基础上再建立一个模型,让机器自己去学习输出方式,有时候我们会训练多个强学习器,比如将训练一个随机森林的学习器,再训练一个Adaboost的学习器,然后将这两个学习器的弱学习器的输出作为输入(这样我们就有两条输入数据),训练一个用于最终预测的学习器来输出结果。

 5、Adaboost和RandomForest对比

  Adaboost算法常用的弱学习器是决策树和神经网络(理论上可以用任何学习器作为基学习器)。对于决策树,Adaboost分类用了CART分类树,Adaboost回归用了CART回归树。Adaboost和Boosting算法一样,重点关注模型的偏差,迭代的过程中是以降低偏差为目的,一般偏差会较小,但这并不意味这Adaboost的方差很大,很容易过拟合,实际上是可以通过调整模型的复杂度来避免过拟合的,例如决策树为基学习器时,可以调节树深,或者是叶节点中样本的个数等来实现。Adaboost只能做二分类问题,最终的输出是用sign函数决定的。当然对算法上做一些修改也是可以用于回归问题的,但是对于多分类问题就比较复杂。

  Adaboost的主要优点:

  1)Adaboost作为分类器时,分类精度很高

  2)在Adaboost的框架下,可以使用各种分类回归模型来构建基学习器

  3)作为简单的二分类问题,构建简单,结果可理解

  4)不容易发生过拟合

  Adaboost的主要缺点:

  1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习其的预测准确性

  2)Adaboost只能做二分类问题,要做多分类问需要做其他的变通

  RandomForest算法常用的弱学习器也是决策树和神经网络,对于决策树,在随机森林中也是使用CART分类回归树来处理分类回归问题,通常采用投票法和平均法来决定最后的输出,对于分类问题采用投票法也决定了随机森林能无修改的应用于多分类问题,随机森林和Bagging算法一样,重点关注降低模型的方差,泛化能力强,但是有时候也会出现较大的训练误差,这可以通过加大模型的复杂度来解决,另外在随机森林中是采用随机选择子特征集的,子特征集的个数也会影响要模型的方差和偏差,一般认为子特征集越大,模型的偏差会越小。因为随机森林的模型简单,效果好,因此也产生了很多变种算法,这些变种算法可以用来处理分类回归问题,也可以处理特征转换,异常点检测等。

  例如extra trees就是随机森林的一种推广形式,它改变了两个地方,一是不再采取自助采样法去随机抽取样本,而是采用原始集作为训练样本;二是直接随机选择特征(相当于子特征集只有一个元素)。extra trees的方差比随机森林更小,因此泛化能力更强,但是偏差也更大。

  随机森林的主要优点:

  1)训练可以高度并行化,因此算法的速度要选快于Adaboost。

  2)由于随机子特征集,因此在高维特征下,算法仍具有较好的效率

  3)在训练后可以给出各个特征对输出的重要性

  4)由于随机采样,训练出的模型的方差小,泛化能力强

  5)算法实现起来比Boosting更简单

  6)对部分特征缺失不敏感

  随机森林的主要缺点:

  1)在某些噪声比较大的样本集上,RF模型容易陷入过拟合

  2)取值比较多的特征容易影响随机森林的决策,影响模型的拟合效果

  最后关于Bagging重点降低方差,Boosting重点降低偏差来说一说。首先对于Bagging来说,利用对样本进行重采样,然后用类似的模型来训练基学习器,由于子样本集的相似性和使用的模型相同,因此最终的基学习器有近似相等的方差和偏差,对于类似的偏差是无法通过模型平均来降低的,而对于方差在模型平均时会弱化每个基学习器的异常值,强化每个基学习器的共通值,因此会降低模型的方差。对于Boosting,其算法的核心就是关注偏差,在算法优化过程中每次都最小化弱学习器,这本身就是一种以降低偏差为目的的优化方式,因此会降低模型的偏差,当然Boosting也会降低模型的方差,只是没有偏差明显。

原文地址:https://www.cnblogs.com/jiangxinyang/p/9236385.html

时间: 2024-10-01 05:59:52

机器学习算法总结(三)——集成学习(Adaboost、RandomForest)的相关文章

吴裕雄 python 机器学习——集成学习AdaBoost算法分类模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_classification(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 digits 数据集 digits=datasets.load_d

吴裕雄 python 机器学习——集成学习AdaBoost算法回归模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_classification(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 digits 数据集 digits=datasets.load_d

机器学习算法笔记2_1:生成学习算法(Generative Learning algorithms)

我们之前学习的算法都是基于p(y|x;θ), 他的思想是找出找出一个决策边界来将两类分开,而生成算法是先对两个类别分别建模,为了将样本分开,将样本代入两个模型,看样本与哪个类别更匹配. 这种试图直接从输入x映射到类别标签{0,1}的算法被称为判别学习算法:而通过计算p(x|y)(和p(y))来得到模型的算法被称为生成学习算法 通过贝叶斯函数得到p(y|x)=p(x|y)p(y)p(x), argmaxyp(y|x)=argmaxyp(x|y)p(y)p(x)=argmaxyp(x|y)p(x)

Python机器学习:7.1 集成学习

集成学习背后的思想是将不同的分类器进行组合得到一个元分类器,这个元分类器相对于单个分类器拥有更好的泛化性能.比如,假设我们从10位专家那里分别得到了对于某个事件的预测结果,集成学习能够对这10个预测结果进行组合,得到一个更准确的预测结果. 后面我们会学到,有不同的方法来创建集成模型,这一节我们先解决一个基本的问题:为什么要用集成学习?她为什么就比单个模型效果要好呢? 本书是为初学者打造的,所以集成学习这里我们也只关注最基本的集成方法:投票法(majority voting).投票法意味着我们在得

机器学习(五)—集成学习

1.boosting与bagging的区别:  (1)bagging:从原始数据中随机抽样得到S个同样大小的数据集,来训练S个基学习器,各学习器之间互不依赖.是一种并行的方法.  各分类器的权重都是相等的.分类结果是用这S个分类器进行分类,选择分类器投票结果中最多的类别作为最后的分类结果.  (抽样方法为有放回的抽样:允许每个小数据集中可以有重复的值.) 优点: a.训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶,高效: b.标准的AdaBoost只适用于二分类,Bag

集成学习-Adaboost 进阶

adaboost 的思想很简单,算法流程也很简单,但它背后有完整的理论支撑,也有很多扩展. 权重更新 在算法描述中,权重如是更新 其中 wm,i 是m轮样本i的权重,αm是错误率,Øm是第m个基学习器的输出,Zm是归一化因子 当预测值与真实值相同时,yØ=1,-αyØ<0,exp(-αyØ)<1,权重降低: 当预测值与真实值不同时,yØ=-1,-αyØ>0,exp(-αyØ)>1,权重增加: 而且变化幅度由α确定: 这样可以说得通,但是这个式子是怎么来的呢? 原理推导 第一个式子表

专家观点碰撞:深度学习能否取代其他机器学习算法

专家观点碰撞:深度学习能否取代其他机器学习算法 摘要:深度学习在最近两年非常火爆,但深度学习能否取代其他机器学习算法?纽约大学研究生Ran Bi根据Quora上的一个讨论总结了不同的观点,CSDN编辑将其翻译如下,并加上一些国内人工智能专家的观点,供大家参考. [编者按]深度学习在最近两年非常火爆,但深度学习能否取代其他机器学习算法?纽约大学研究生Ran Bi根据Quora上的一个讨论总结了不同的观点,CSDN编辑将其翻译如下,并加上一些国内人工智能专家的观点,供大家参考. 深度学习迅速地成长起

Ensemble learning(集成学习)

定义 集成学习是一种机器学习范式,其中多个学习器被训练来解决相同的问题. 这与试图从训练数据中学习一个假设的普通机器学习方法相反,集成方法尝试构造一组假设并将它们结合使用. 一个集合包含一些通常被称为基础学习器的学习器. 一个集合的泛化能力通常比单个基础学习器的泛化能力强得多. 实际上,集成学习具有极大吸引力,因为它可以将弱于随机猜测的弱学习器提升为能够做出非常准确预测的强大学习器. 所以,"基础学习器"也被称为"弱学习器". 然而,值得注意的是,尽管大多数理论分析

7. 集成学习(Ensemble Learning)Stacking

1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random Forest) 4. 集成学习(Ensemble Learning)Adaboost 5. 集成学习(Ensemble Learning)GBDT 6. 集成学习(Ensemble Learning)算法比较 7. 集成学习(Ensemble Learning)Stacking 1. 前言 到现在