随机森林算法——Random Forest(RF)

Bagging和Boosting 概念及区别

随机森林属于集成学习(Ensemble Learning)中的bagging算法。在集成学习中,主要分为bagging算法和boosting算法。我们先看看这两种方法的特点和区别。

Bagging

bagging的算法过程如下:

  1. 从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
  2. 对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
  3. 对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)

Boosting

boosting的算法过程如下:

  1. 对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。
  2. 进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)

Bagging,Boosting的主要区别

  1. 样本选择上:Bagging采用的是Bootstrap随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。
  2. 样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。
  3. 预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数其权重越大。
  4. 并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数必须按顺序迭代生成。

下面是将决策树与这些算法框架进行结合所得到的新的算法:

  1. Bagging + 决策树 = 随机森林
  2. AdaBoost + 决策树 = 提升树
  3. Gradient Boosting + 决策树 = GBDT

决策树

常用的决策树分为ID3,C4.5,CART三种。决策树模型的构建如下:

决策树的生成

输入:训练集D,特征集A,阈值eps
输出:决策树T

  1. 若D中所有样本属于同一类Ck,则T为单节点树,将类Ck作为该结点的类标记,返回T
  2. 若A为空集,即没有特征作为划分依据,则T为单节点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
  3. 否则,计算A中各特征对D的信息增益(ID3)/信息增益比(C4.5),选择信息增益最大的特征Ag
  4. 若Ag的信息增益(比)小于阈值eps,则置T为单节点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
  5. 否则,依照特征Ag将D划分为若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点,由结点及其子节点构成树T,返回T
  6. 对第i个子节点,以Di为训练集,以A-{Ag}为特征集,递归地调用1~5,得到子树Ti,返回Ti

ID3,C4.5决策树的区别

  1. ID3以信息增益为准则划分属性,递归构建决策树。一般而言,信息增益越大,意味着使用属性进行划分所获得的“纯度提升越大”
  2. C4.5以增益率为准则划分属性。信息增益准则对取值数目较多的属性有所偏好,增益率对取值数目较少的属性有所偏好,C4.5不是直接选择增益率最大的候选划分属性,而使用一种启发式:先从候选划分属性中找到信息增益高于平均水平的属性,再从中选择增益率最高的

CART

分类与回归树(CART)同样由特征选择、树的生成和剪枝组成。但CART还在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。

CART假设决策树是二叉树,递归地二分每个特征,将输入空间划分为有限个单元,并在这些单元上预测概率分布。
CART由两步组成:

  1. 树生成:基于训练集生成决策树,生成决策树尽量地大。
  2. 树的剪枝:用验证集对已生成的树进行剪枝并选择最优子树。

CART决策树的生成(分类)

输入:训练数据集D,特征值集A
输出:CART决策树
停止计算条件:结点中的样本个数小于预定阈值,样本集的Gini系数小于预定阈值(样本基本属于同一类),或者没有更多特征。

根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:

  1. 设结点的训练数据集为D,计算现有属性对该数据集的Gini系数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D1和D2两部分,计算A=a时的Gini系数。
  2. 所有可能的特征A以及它们所有可能的切分点a中,选择Gini系数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
  3. 对两个子结点递归地调用步骤l~2,直至满足停止条件。
  4. 生成CART决策树。

CART决策树的生成(回归)
输入:训练数据集D
输出:回归数f(x)
在训练数据所在输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域的输出值,构建二叉决策树。

  1. 选择最优切分变量j和切分点s,求解
    min j , s [ min c 1 x i R 1 ( j , s ) ( y i c 1 ) 2 + min c 2 x i R 2 ( j , s ) ( y i c 2 ) 2 ]
    其中, R 1 ( j , s ) = ( x | x ( j ) s ) , R 2 ( j , s ) = ( x | x ( j ) s ) ,遍历变量j,对固定切分变量j扫描切分点s,选择使上式达到最小值的对(j,s)。
  2. 用选定的对(j,s)划分区域并决定相应的输出值。
    R 1 ( j , s ) = ( x | x ( j ) s ) , R 2 ( j , s ) = ( x | x ( j ) s )
    c ^ = 1 N m x i R m ( j , s ) y i , x R m , m = 1 , 2
  3. 继续对两个子区域调用步骤1,2,知道满足停止条件。
  4. 将输入空间划分为M个区域, R 1 , R 2 , . . . R m ,生成决策树。
    f ( x ) = m = 1 M c ^ I ( x R m )

关于CART更详细的说明参考李航的统计学习方法


随机森林(Random Forests)

随机森林是一种重要的基于Bagging的集成学习方法,可以用来做分类、回归等问题。

随机森林有许多优点:

  • 具有极高的准确率
  • 随机性的引入,使得随机森林不容易过拟合
  • 随机性的引入,使得随机森林有很好的抗噪声能力
  • 能处理很高维度的数据,并且不用做特征选择
  • 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
  • 训练速度快,可以得到变量重要性排序
  • 容易实现并行化

随机森林的缺点:

  • 当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
  • 随机森林模型还有许多不好解释的地方,有点算个黑盒模型

与上面介绍的Bagging过程相似,随机森林的构建过程大致如下:

  1. 从原始训练集中使用Bootstraping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
  2. 对于n_tree个训练集,我们分别训练n_tree个决策树模型
  3. 对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
  4. 每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
  5. 将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果

参考:
1、统计学习方法——李航
2、本文的参考博客https://blog.csdn.net/qq547276542/article/details/78304454
3、关于决策树的特征选择(信息增益,增益率,Gini系数)和决策树的剪枝
4、CART决策树的直观讲解
5、CARTpython代码实现

猜你喜欢

转载自blog.csdn.net/u014135752/article/details/80612184