机器学习之RandomForest(随机深林)原理与实战

一、Bagging和Boosting的概念与区别

1、bootstrap sampling(自助采样法)

在训练学习器时,我们希望学习器不仅能很好地拟合训练样本,还可以有较低的泛化误差,因此一般采用留出法和交叉验证法,但是这些方法会受到数据规模的影响,尤其是在原始数据很少的情况下,而留一法又会带来巨大的计算量。因此可以采用自助采样法(bootstrap sampling)。

假设当前有一个含有m个样本的数据集D,我们对其进行m次"有放回的"随机采样,这样得到了大小为m的新数据集 D t D^t Dt。可以肯定的是,新数据集必定含有原始数据集中某个样本的重复采样,可以进行下面的估计。

每一轮采样中,样本x被抽到的概率为1/m,因此,在m轮抽样后,该样本仍未被抽到的概率为:

lim ⁡ m → ∞ ( 1 − 1 m ) m = 1 e = 36.8 \lim_{m\rightarrow \infty }\left ( 1-\frac{1}{m} \right )^m=\frac{1}{e}=36.8 limm(1m1)m=e1=36.8%

因此,原始数据集中有大约36.8%的样本没有被抽到,这些样本就可以用于验证由新数据训练得到的基学习器,称为包外估计(out-of-bag estimate)

当数据集很小,以至于训练集、测试集不能很好地分开时,这种方法比较适合,也为集成学习提供了很多帮助。但是,由于得到的新数据集或多或少的改变了原始数据集的样本分布,自助采样法可能会引入一些误差,因此,当原始数据集足够大时,尽量选用留出法和交叉验证法。

2、out-of-bag estimate(包外估计)

由于自助采样法产生的新数据集包含大约63.2%的原始样本,因此每轮迭代中,可以使用剩下的36.8%的原始样本对产生的基学习器进行泛化误差的"包外估计(out-of-bag estimate)",减小过拟合的风险,当基学习器是决策树或神经网络时尤其重要。

为此需记录每个基学习器所使用的训练样本。假设,Bagging算法产生了T个基学习器 h t h_t ht,其中第t个基学习器 h t h_{t} ht是由数据集 D t D_{t} Dt训练得到的,令 H o o b ( x ) H^{oob}(x) Hoob(x)表示对样本 x x x的包外预测,即仅考虑那些未使用 x x x训练的基学习器在 x x x上的预测,有

H o o b ( x ) = a r g m a x y ∈ Y ∑ t = 1 T I ( h t ( x ) = y ) ⋅ I ( x ∉ D t ) H^{oob}(x)=\underset{y\in Y}{arg max}\sum _{t=1}^{T}\mathbb{I}(h_t(x)=y)\cdot \mathbb{I}(x\notin D_t) Hoob(x)=yYargmaxt=1TI(ht(x)=y)I(x/Dt)

上式表明寻找最大的分类标签y,使不在 D t D_{t} Dt中的数据集对基学习器的预测之和最大(投票法)。将这个最大的y作为预测的标签

则Bagging泛化误差的包外估计为

ϵ o o b = 1 ∣ D ∣ ∑ ( x , y ) ∈ D I ( H o o b ≠ y ) \epsilon ^{oob}=\frac{1}{\left | D \right |}\sum _{(x,y)\in D}\mathbb{I}(H^{oob}\neq y) ϵoob=D1(x,y)DI(Hoob̸=y)

这里x依旧是 D t D_{t} Dt的补集,事实上,包外样本还有许多其他用途。例如当基学习器是决策树时,可使用包外样本来辅助剪枝,或用于估计决策树中各节点的后验概率以辅助对零训练样本节点的处理;当基学习器是神经网络时,可使用包外样本来辅助早期停止以减小过拟合风险。

3、Bagging(套袋法)

Bagging的算法过程如下:

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

boosting的算法过程如下:

  1. 对于训练集中的每个样本建立权值 w i w_i wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值
  2. 进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个若分类器一个权值,将其线性组合作为最终分类器。误差越小的弱分类器,其权值越大)
5、Bagging,Boosting的主要区别
  1. 样本选择上:Bagging采用的Bootsrap(自助采样法)随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。
  2. 样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。
  3. 预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数其权重越大。
  4. 并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数必须按顺序串行迭代生成。
  5. 基学习器关系:Bagging的基学习器不存在强依赖关系;而Boosting的基学习器存在强依赖关系。

将决策树与这些算法框架进行结合可以得到的新的算法如下:

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

二、随机森林

随机森林(Random Forest,简称RF)是Bagging的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性,而在RF中,对基学习器的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令k=d,则基决策树的构建与传统决策树相同;若令k=1,则是随机选择一个属性用于划分;一般情况下,推荐值为

k = l o g 2 d k=log_2d k=log2d

随机森林的一些要点

Bagging主要关注降低方差,因此当基学习器为决策树和神经网络等易受样本扰动的学习器时,Bagging的效果更好,因为这些学习器普遍具有较高的方差。当然也可以在生成基学习器的过程中,使用包外样本提高基学习器的泛化能力。

  • 随机森林的优点:
    • 具有极高的准确率
    • 随机性的引入,使得随机森林不容易过拟合
    • 随机性的引入,使得随机森林有很好地抗噪声能力
    • 能处理很高维度的数据,并且不用做特征选择
    • 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
    • 训练速度快,可以得到变量重要性排序
    • 容易实现并行化
  • 随机森林的缺点
    • 随机森林的起始性能往往比较差,特别是只有一个基学习器时,这是因为基学习器的训练过程中加入了属性扰动,导致基学习器的性能降低。但是,随着基学习器的个数增加,随机森林产生的继承学习器的性能会得到很大的提升,即最终泛化误差会收敛到最小。

三、sklearn中RF的基本使用步骤

随机样本生成方法(make_classification)

sklearn中make_classification是一种随机生成分类样本的方法,其参数如下:

from sklearn.datasets import make_classification

X,y = make_classification(n_samples=1000, #样本个数
                         n_features=20,   #特征个数= n_informative + n_redundant + n_repeated
                         n_informative=2, #多信息特征的个数
                         n_redundant=2,  #冗余信息,informative特征的随机线性组合
                         n_repeated=0,  #重复信息,随机提取n_informative和n_redundant 特征
                         n_classes=2  #分类类别
                         n_clusters_per_class=2, #某一个类别是由几个cluster构成的
                         weights=None, #分配给每个类的样本比例。如果没有,那么类是平衡的
                         random_state=7,
               )

返回值
X:形状数组[n_samples,n_features]
生成的样本。

y:形状数组[n_samples]
每个样本的类成员的整数标签.

在这里插入图片描述

在这里插入图片描述


sklearn中的RF方法与其他方法类似,如果该兴趣的小伙伴可以参考这里

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值