精华内容
下载资源
问答
  • 基于该弱学习器,通过样本集扰动、输入特征扰动、输出表示扰动、算法参数扰动等方式生成多个学习器,进行集成后获得一个精度较好的"强学习器"。 举例说明:以三分类问题为例,假如有 N 个分类器相互独立...

    集成学习的定义

    集成学习的主要思路是先通过一定的规则生成多个学习器,再采用某种集成策略进行组合,最后综合判断输出最终结果。一般而言,通常所说的集成学习中的多个学习器都是同质的"弱学习器"。基于该弱学习器,通过样本集扰动、输入特征扰动、输出表示扰动、算法参数扰动等方式生成多个学习器,进行集成后获得一个精度较好的"强学习器"。

    举例说明:以三分类问题为例,假如有 N 个分类器相互独立,错误率都为 P , 使用简单的投票法组合分类器,其分类器的错误率为

    从上式可以看出P<0.5时,错误率Perror随着N的增大而减小,如果每个分类器的错误率都小于0.5,且相互独立,则集成学习器个数越多,错误率越小,当N无穷大时,错误率接近于零。

     bagging 算法

    1.1定义:

    从上图可以看出,Bagging的弱学习器之间的确没有boosting那样的联系。它的特点在“随机采样”。

    随机采样(bootsrap)就是从我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,一般会随机采集和训练集样本数m一样个数的样本。这样得到的采样集和训练集样本的个数相同,但是样本内容不同。如果我们对有m个样本训练集做T次的随机采样,,则由于随机性,T个采样集各不相同。

    对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是1/m。不被采集到的概率为1−1/m。如果m次采样都没有被采集中的概率是(1-1/m)^^m。当m→∞时(1-m/1)^^m→1/e≃0.368。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。

    1.2 算法流程

    输入为样本集D={(x,y1),(x2,y2),...(xm,ym)},弱学习器算法, 弱分类器迭代次数T。

        输出为最终的强分类器f(x)

        1)对于t=1,2...,T:

          a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集DtDt

          b)用采样集Dt训练第t个弱学习器Gt(x)

        2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出

    boosting算法

    2.1 原理

     

    (1)初始化训练数据(每个样本)的权值分布:如果有N个样本,则每一个训练的样本点最开始时都被赋予相同的权重:1/N。

    (2)训练弱分类器。具体训练过程中,如果某个样本已经被准确地分类,那么在构造下一个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。同时,得到弱分类器对应的话语权。然后,更新权值后的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

    (3)将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,分类误差率小的弱分类器的话语权较大,其在最终的分类函数中起着较大的决定作用,而分类误差率大的弱分类器的话语权较小,其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的比例较大,反之较小。

    2.2算法流程

    第一步:
    初始化训练数据(每个样本)的权值分布。每一个训练样本,初始化时赋予同样的权值w=1/NN为样本总数。

    https://img-blog.csdn.net/20160603094805020

    D1表示,第一次迭代每个样本的权值。w11表示,第1次迭代时的第一个样本的权值。
    N为样本总数。
    第二步:进行多次迭代,m=12….Mm表示迭代次数。
    a)使用具有权值分布Dm(m=1,2,3…N)的训练样本集进行学习,得到弱的分类器。

    该式子表示,第m次迭代时的弱分类器,将样本x要么分类成-1,要么分类成1.那么根据什么准则得到弱分类器?
    准则:该弱分类器的误差函数最小,也就是分错的样本对应的 权值之和,最小

    该式是随em减小而增大。即误差率小的分类器,在最终分类器的 重要程度大。
    c)更新训练样本集的权值分布。用于下一轮迭代。其中,被误分的样本的权值会增大,被正确分的权值减小。

    Dm+1是用于下次迭代时样本的权值,Wm+1,i是下一次迭代时,第i个样本的权值。

        其中,yi代表第i个样本对应的类别(1或-1),Gm(xi)表示弱分类器对样本xi的分类(1或-1)。若果分对,yi*Gm(xi)的值为1,反之为-1。其中Zm是归一化因子,使得所有样本对应的权值之和为1.

    第三步迭代完成后,组合弱分类器。

    加个sign函数,该函数用于求数值的正负。数值大于0,为1。小于0,为-1.等于0,为0.得到最终的强分类器G(x)

    https://img-blog.csdn.net/20160603100710683

    优点

    1)精度很高的分类器
    2)提供的是框架,可以使用各种方法构建弱分类器
    3)简单,不需要做特征筛选
    4)不用担心过度拟合

    随机森林

    定义:随机森林指的是利用多棵树对样本进行训练并预测的一种分类器

    举例说明:随机森林中有许多的分类树。我们要将一个输入样本进行分类,我们需要将输入样本输入到每棵树中进行分类。打个形象的比喻:森林中召开会议,讨论某个动物到底是老鼠还是松鼠,每棵树都要独立地发表自己对这个问题的看法,也就是每棵树都要投票。该动物到底是老鼠还是松鼠,要依据投票情况来确定,获得票数最多的类别就是森林的分类结果。森林中的每棵树都是独立的,99.9%不相关的树做出的预测结果涵盖所有的情况,这些预测结果将会彼此抵消。少数优秀的树的预测结果将会超脱于芸芸“噪音”,做出一个好的预测。将若干个弱分类器的分类结果进行投票选择,从而组成一个强分类器,这就是随机森林bagging的思想(关于bagging的一个有必要提及的问题:bagging的代价是不用单棵决策树来做预测,具体哪个变量起到重要作用变得未知,所以bagging改进了预测准确率但损失了解释性。)。下图可以形象地描述这个情况:

     

     

     

    展开全文
  • 随机森林为例 上面的可能有些抽象,这里用RandomForest(RF)来作为例子: 随机森林是bagging的集成模型,这里: RF(x)=1B∑i=1BTi,zi(x)RF(x)=\frac{1}{B}\sum^B_{i=1}{T_{i,z_i}(x)}RF(x)=B1​∑i=1B​Ti,zi​​(x)...

    校招在即,准备准备一些面试可能会用到的东西吧。希望这次面试不会被挂。

    基本概念

    说到机器学习模型的误差,主要就是bias和variance。

    • Bias:如果一个模型的训练错误大,然后验证错误和训练错误都很大,那么这个模型就是高bias。可能是因为欠拟合,也可能是因为模型是弱分类器。

    • Variance:模型的训练错误小,但是验证错误远大于训练错误,那么这个模型就是高Variance,或者说它是过拟合。


    这个图中,左上角是低偏差低方差的,可以看到所有的预测值,都会落在靶心,完美模型;

    右上角是高偏差,可以看到,虽然整体数据预测的好像都在中心,但是波动很大。

    【高偏差vs高方差】
    在机器学习中,因为偏差和方差不能兼顾,所以我们一般会选择高偏差、低方差的左下角的模型。稳定性是最重要的,宁可所有的样本都80%正确率,也不要部分样本100%、部分50%的正确率。个人感觉,稳定性是学习到东西的体现,高方差模型与随机蒙的有什么区别?

    随机森林为例

    上面的可能有些抽象,这里用RandomForest(RF)来作为例子:
    随机森林是bagging的集成模型,这里:
    RF(x)=1Bi=1BTi,zi(x)RF(x)=\frac{1}{B}\sum^B_{i=1}{T_{i,z_i}(x)}

    • RF(x)表示随机森林对样本x的预测值;
    • B表示总共有B棵树;
    • ziz_i表示第i棵树所使用的训练集,是使用bagging的方法,从所有训练集中进行行采样和列采样得到的子数据集。

    这里所有的zz,都是从所有数据集中随机采样的,所以可以理解为都是服从相同分布的。所以不断增加B的数量,增加随机森林中树的数量,是不会减小模型的偏差的。
    【个人感觉,是因为不管训练再多的树,其实就那么多数据,怎么训练都不会减少,这一点比较好理解】

    【RF是如何降低偏差的?】
    直观上,使用多棵树和bagging,是可以增加模型的稳定性的。怎么证明的?


    我们需要计算Var(T(x))Var(T(x))
    假设不同树的ziz_i之间的相关系数为ρ\rho,然后每棵树的方差都是σ2\sigma^2.

    先复习一下两个随机变量相加的方差如何表示:
    Var(aX+bY)=a2Var(X)+b2Var(Y)+2abcov(X,Y)Var(aX+bY)=a^2 Var(X)+b^2 Var(Y) + 2ab cov(X,Y)

    • Cov(X,Y)表示X和Y的协方差。协方差和相关系数不一样哦,要除以X和Y的标准差:
      ρ=cov(X,Y)σXσY\rho=\frac{cov(X,Y)}{\sigma_X \sigma_Y}

    下面转成B个相关变量的方差计算,是矩阵的形式:

    很好推导的,可以试一试。

    这样可以看出来了,RF的树的数量越多,RF方差的第二项会不断减小,但是第一项不变。也就是说,第一项就是RF模型偏差的下极限了。

    【总结】

    • 增加决策树的数量B,偏差不变;方差减小;
    • 增加决策树深度,偏差减小;ρ\rho减小,σ2\sigma^2增加;
    • 增加bagging采样比例,偏差减小;ρ\rho增加,σ2\sigma^2增加;

    【bagging vs boost】
    之前也提到过了boost算法:
    一文读懂:GBDT梯度提升
    GBDT中,在某种情况下,是不断训练之前模型的残差,来达到降低bias的效果。虽然也是集成模型,但是可以想到,每一个GBDT中的树,所学习的数据的分布都是不同的,这意味着在GBDT模型的方差会随着决策树的数量增多,不断地增加。

    • bagging的目的:降低方差;
    • boost的目的:降低偏差

    喜欢的话,可以微信扫码关注微信公众号【机器学习炼丹术】,成为炫酷的炼丹师吧~

    公众号回复【下载】有精选的免费机器学习学习资料。 公众号每天会更新一个机器学习、深度学习的小知识,都是面试官会问的知识点哦~

    • 【机器学习的基础数学(PDF)】
    • 【竞赛中的大数据处理流程(PDF)】
    • 【如何做大数据的基础特征工程(PDF)】
    • 【自然语言处理NLP的应用实践大合集(PDF)】
    • 【python入门级教材(400页PDF)】

    公众号每天会更新一个机器学习、深度学习的小知识,都是面试官会问的知识点哦~

    在这里插入图片描述

    展开全文
  • 13集成算法随机森林 竞赛题使用较多中准确率较高,三种集成算法 1.Bagging模型(并形算法) 并行训练多棵树,结果累加取平均。随机森林构造了N棵树,最终结果把树进行分类取众数。 二重随机性:数据采样随机性...

    唐宇迪《python数据分析与机器学习实战》学习笔记
    13集成算法与随机森林

    竞赛题使用较多中准确率较高,三种集成算法
    在这里插入图片描述

    1.Bagging模型

    (并形算法)

    并行训练多棵树,结果累加取平均。随机森林构造了N棵树,最终结果把树进行分类取众数。
    二重随机性:数据采样随机性(例如100个有放回选60-80个),特征随机性(寻则部分特征)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    特征重要性比较原理
    举例:比如ABCD四个特征,B为年龄(36、27、65…),用着四个特征建模错误率为err1;后面对B特征进行破坏加上噪音,替换为垃圾值(0.1、68…),然后继续用这四个特征建模,错误率为err2; 如果err1=err2,则B特征没啥用。如果err2>>err1,则B重要。最后特征的重要性排序如上图右下角。
    在这里插入图片描述
    其他算法的Bagging模型,例如KNN模型缺点比较明显。公认的集成算法还是是上面的树模型。
    在这里插入图片描述
    树模型的树数量对效果的影响,数量增加效果浮动。(虽然理论上数量越多泛化能力越强)
    在这里插入图片描述

    2. Boosting模型

    (串形算法)

    从弱学习器开始,例如实际1000,第一棵A树预测950,差异50,让这个50值越小越好;第二棵B树,为了弥补50误差,就预测残差50,可能预测为30;第三棵C树,1000-950-30=20,就预测残差20,可能预测为18.最终预测值为998,实际为1000.在这里插入图片描述
    典型代表:AdaBoost,Xgboost。前者举例如下图右边,例如12345号预测都为0.2,3号预测错了,那么第二次就调整权重策略,重视3号降低其他重视度,然后每次慢慢调整。权重越大越重视,切分时朝着这个节点切分。
    在这里插入图片描述

    3.Stacking模型

    (不折手段)
    在这里插入图片描述
    特征—结果,结果作为特征—新结果
    例如下面:第一阶段用4个分类器每个特征值得到4个值,相当于特征值转为分类结果;第二阶段分类结果值当成特征输入,然后得到结果。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 随机森林算法2.1. Bagging算法2.2. 随机森林算法原理2.3 随机森林的OOB估计2.4 随机森林的特征选取2.4.1. 随机输入变量选取2.4.2. 随机组合输入变量2.4.3 随机特征数的确定2.5. 随机森林的优缺点2.5.1. 随机森林...

    1. 随机森林的简介

    随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。最近几年的国内外大赛,包括阿里巴巴天池大数据竞赛以及Kaggle数据科学竞赛,参赛者对随机森林的使用占有相当高的比例。此外,一大部分成功进入答辩的队伍也都选择了Random Forest 或者 GBDT 算法。可以看出,Random Forest在准确率方面还是相当有优势的。

    随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。一棵叫做树,那么成百上千棵就是森林,这也是随机森林的主要思想——集成思想的体现。

    从直观角度来解释,每棵决策树都是一个分类器(假设讨论的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。

    2001年Breiman把分类树组合成随机森林,即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果。随机森林在运算量没有显著提高的前提下提高了预测精度。

    随机森林对多元公线性不敏感,结果对缺失数据和非平衡的数据比较稳健,可以很好地预测多达几千个解释变量的作用,被誉为当前最好的算法之一。

    2. 随机森林算法

    2.1. Bagging算法

    想要得到泛化能力强的集成,集成中的个体学习器应尽可能相互独立;虽然"独立"在现实任务中无法做到,但可以设法使基学习器尽可能具有较大的差异。给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生出若干不同的子集,再从每个数据子集中训练出一个基学习器。这样,由于训练数据不同,获得的基学习器可望具有较大的差异。然而,为获得好的集成,还希望个体学习器不能太差。如果采样出的每个子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至不足以进行有效学习,这显然无法确保产生出比较好的基学习器。为了解决这个问题,可以考虑使用相互有交叠的采样子集。

    Bagging是并行式集成学习方法最著名的代表。它直接基于自助采样法(Bootstrap Sampling),给定包含 个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过 次随机采样操作,得到含 个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现。

    照这样,可采样出T个含m个样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合,这就是Bagging的基本流程。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜利者。Bagging的算法描述如图 1所示。
    在这里插入图片描述
    为处理多分类或者回归任务,AdaBoost需进行修改。与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改的用于多分类、回归等任务。

    从偏差-方差角度分析,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。

    2.2. 随机森林算法原理

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

    随机森林分类(RFC)是由很多决策树分类模型 组成的组合分类模型{h(x,k),k=1,2,...}\{h(x,k),k=1,2,...\},且参数集{k}\{k\}是独立同分布的随机向量,在给定自变量x下,每个决策树分类模型都由一票投票权来选择最优的分类结果。RFC的基本思想是:首先,利用bootstrap抽样从原始训练集中抽取k个样本,且每个样本的样本容量都与原始训练集一样;其次,对k个样本分别建立k个决策树模型,得到k种分类结果;最后,根据k种分类结果对每个记录进行投票决定其最终分类,详见图 2所示。
    在这里插入图片描述
    RF通过构造不同的训练集增加分类模型间的差异,从而提高组合分类模型的外推预测能力。通过k轮训练,得到一个分类模型序列 ,再用它们构成一个多分类模型系统,若该系统的最终分类结果采用简单多数投票法。最终的分类决策为:
    在这里插入图片描述

    2.3 随机森林的OOB估计

    RF是决策树的组合,用Bagging方法产生不同的训练集,也就是从原始训练集里利用Bootstrap抽样生成新的训练集,对每个新的训练集,利用随机特征选取方法生成决策树,且决策树在生长过程中不进行剪枝。用Bagging方法生成训练集,原始训练集D中每个样本未被抽取的概率为 (11N)N(1-\frac{1}{N})^N ,这里N为原始训练集D中样本的个数。当N足够大时, (11N)N(1-\frac{1}{N})^N 将收敛于1e0.368\frac{1}{e}\approx0.368,这表明原始样本集D中接近37%的样本不会出现在Bootstrap样本中,这些数据称为袋外(Out-Of-Bag,OOB)数据,使用这些数据来估计模型的性能称为OOB估计。之所以使用Bagging方法,是因为一方面RF使用随机特征时可以提高精度;另一方面还可以使用OOB数据估计组合树的泛化误差,以及强度和相关系数。

    为此需记录基学习器所使用的训练样本。令 表示 实际使用的训练样本集,令 表示对样本 的包外预测,即仅考虑那些未使用 训练的基学习器在 上的预测,有:
    在这里插入图片描述
    对于每一棵决策树,都可以得到一个OOB误差估计,将森林中所有决策树的OOB误差估计取平均,即可得到RF的泛化误差估计。
    在这里插入图片描述
    Breiman通过实验证明,OOB误差是无偏估计。用交叉验证(CV)估计组合分类器的泛化误差时,可能导致很大的计算量,从而降低算法的运行效率,而采用OOB数据估计组合分类器的泛化误差时,可以在构建各决策树的同时计算出OOB误差率,最终只需增加少量的计算就可以得到。相对于交叉验证,OOB估计是高效的,且其结果近似于交叉验证的结果。使用OOB数据还可以估计强度和相关系数。它提供了一个内部估计,从而有助于理解分类精度及如何提高精度。

    事实上,包外估计还可用来在决策树时辅助剪枝;估计决策树中各节点的后验概率以辅助对零训练样本结点的处理;在基学习器是神经网络时,可用来辅助早起停止以减小基学习器是神经网络的过拟合风险。

    2.4 随机森林的特征选取

    随机特征(输入变量)选取,指RF为了提高预测精度,引入随机性,减小相关系数而保持强度不变,每棵决策树都使用一个从某固定概率分布产生的随机向量,可使用多种方法将随机向量合并到树的生长过程。目前主要方法有随机选择输入变量(Forest-RI)和随机组合输入变量(Forest-RC)。很多文献都证明通过随机特征选取的方法相对于其他方法具有更低的泛化误差。

    2.4.1. 随机输入变量选取

    RF最简单的随机特征选取是在每一个节点随机选取一组(比如F个)输入变量进行分割,这样决策树的节点分割是根据这F个选定的特征,而不是考察所有的特征来决定的。然后利用CART方法完全生长树,不进行修剪,有助于减少树的偏倚。一旦决策树构建完毕,就使用多数表决的方法来组合预测,把这样的过程称为随机选择输入变量(Forest random inputs,简称Forest-RI)。在RF构建过程中选择的输入变量个数F是固定的。为了增加随机性,可以使用bagging方法为Forest-RI产生bootstrap样本。RF的强度和相关性都依赖于F的大小,如果F足够小,树的相关性趋向于减弱;另一方面,分类模型的强度随着输入变量数F的增加而提高。由于在每一个节点仅仅需要考察输入变量的一个子集,这种方法显著减少了算法的运行时间。

    2.4.2. 随机组合输入变量

    假如只有很少的输入变量,比如M值不大,用Forest-RI法从M中随机选择F个作为随机特征,这样可能提高模型的强度,但同时也扩大了相关系数。另外一种方法是用许多输入变量的线性组合来定义更多的随机特征来分割树,比如由L个变量线性组合作为一个输入特征。在一个给定的节点,L个变量是随机选取的,以它们的系数作为权重相加,每一个系数都是在[-1,1]之间的均匀分布随机数。生成F个线性组合,并从中选取最优的分割。这个过程称为Forest-RC(Forest random combinations)。

    2.4.3 随机特征数的确定

    在实际研究中,RF的随机特征数F应该取多少比较合适?不同的随机特征数的选取对模型的强度和相关系数、泛化误差等有何影响?Breiman研究了随机特征数与强度和相关系数的关系,以及随机特征数与泛化误差的关系,发现对于样本量较小的数据集(比如小于1000),随着随机特征个数的增加,强度基本保持不变,但是相关系数会相应增加;测试集误差和OOB误差比较接近,都随着随机特征数的增加而增加,但OOB误差更加稳健。但对于大样本量(比如大于4000),结果与小样本量不同,强度和相关系数都随着随机特征数的增加而增加,而泛化误差率都随随机特征数的增加而略微减少。Breiman认为相关系数越低且强度越高的RF模型越好。

    2.5. 随机森林的优缺点

    2.5.1. 随机森林优点

    • 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合;
    • 在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力;
    • 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无须规范化;
    • 可生成一个Proxinities=(pij)Proxinities=(p_{ij})矩阵,用于度量样本之间的相似性:pij=aijNp_{ij}=\frac{a_{ij}}{N}aija_{ij}表示样本i和j出现在随机森林中同一个叶子节点的次数,N表示随机森林中树的颗数;
    • 在创建随机森林的时候,对generalization error使用的是无偏估计,泛化能力强;
    • 训练速度快,可以得到变量重要性排序(两种:基于OOB误分率的增加量和基于分裂时的GINI下降量);
    • 在训练过程中,能够检测到feature间的互相影响;
    • 容易做成并行化方法;
    • 实现比较简单。

    2.5.2. 随机森林缺点

    • 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟;
    • 对于有不同取值属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
    • 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。

    3. 应用举例(python代码实现)

    本部分将使用随机森林算法实现葡萄酒数据集的分类任务并分析其属性的重要性。

    数据来源是UCI库中的Wine Quality Data Set的数据,可以在这里进行下载,选取其中Vinho Verde牌子的葡萄酒数据作为分析探究,数据集共计1600个样本。在1600个样本数据中,包含了11个表示该葡萄酒样本的物理及化学性质数据,以及一个代表该葡萄酒样本质量的标志数据,分为高等、中等,低等3个质量等级,对应的样本量有346(21.63%)、1194(74.62%)和60(3.74%)。

    Wine Quality Data Set中各项评价指标:
    品质(QT,离散变量):目标变量,质量分级为1到10评分,1为最低,10为最高。
    非挥发性酸含量(Fixed acidity,g/L,连续变量):酸度赋予葡萄酒清新、清脆的品尝感,但过高的酸度也会令葡萄酒感觉涩口,另外酸也可以防止葡萄酒受到细菌的污染。本节中的葡萄酒中的非挥发性酸值指酒石酸含量,非挥发性酸即对葡萄酒进行加热的时候,这种酸并不会挥发出去。
    挥发性酸含量(Volatile Acidity,g/L,连续变量):指醋酸含量。在对葡萄酒进行加热的时候,挥发性酸会挥发出来。
    柠檬酸含量(Citric Acid,g/L,连续变量):主要用于添加酸这个程序,用以抑制有害细菌的发育。但由于它的酸性比较浓,一般主要用于去除葡萄酒中多余的铁和铜。
    残余糖分含量(Residual Sugar,g/L,连续变量):葡萄酒主要由葡萄酿制,在发酵的过程中,葡萄中的糖分会被发酵酵母分解转化成二氧化碳和酒精。主要反映甜度,让酒味变得柔和。
    氯化钠含量(Chlorides,g/L,连续变量):测定的是氯化钠含量,氯离子可能降低葡萄酒的适口性。
    游离二氧化硫含量(Free Sulfur Dioxide,mg/L,连续变量):游离二氧化硫一般浮游在葡萄酒的表面,在葡萄酒中有杀菌、澄清、抗氧化、增酸,以及使酒的风味变好等作用,但是过高含量的二氧化硫会使到葡萄酒具有刺激性气味,同时对人体也有毒害作用。
    总二氧化硫含量(Total Sulfur Dioxide,mg/L,连续变量):葡萄酒中的二氧化硫是指游离二氧化硫和绑定二氧化硫,两者相加就是总的二氧化硫含量。一般来说,当葡萄酒中的游离二氧化硫挥发后,绑定的二氧化硫将会有一部分转化为游离二氧化硫,这是一个转移平衡的过程。
    密度(Density,g/ml,连续变量):一般认为葡萄酒的密度越大,口感会越好。但具体的实际影响还没有得到探究。
    酸碱度(pH,连续变量):pH能对葡萄酒的风味和颜色有较大的影响。在实际操作中,pH值无论是对葡萄还是葡萄酒来说都是一个易于管理和控制的质量参数。
    硫酸钾含量(Sulphates,g/L,连续变量):硫酸盐的增加可能与发酵营养有关,而发酵营养对提高葡萄酒香气是非常重要的。
    酒精浓度(Alcohol,%,连续变量):酒精能够为葡萄酒带来甜润感,酒精浓度用于反映葡萄酒的浓厚度。

    本次分析的样本数据共计1600例,考虑到模型分类中可能出现的过拟合问题,以及需要检验的原因,从整体样本中随机抽取70%划分为训练集,用于训练分类模型。剩下的30%作为测试集,用于检验模型的准确性及比较各分类模型的性能。建立随机森林模型建立随机森林模型代码,并分别在相应的代码后面添加绘图代码以方便查看结果。具体如下:

    import numpy
    import urllib.request
    import pylab as plot
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error
    from sklearn.metrics import accuracy_score
    from sklearn import ensemble
    
    # 从网页中读取数据
    url = "http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
    data = urllib.request.urlopen(url)
    
    """
    names:属性名称
    row:行数据
    lables:标签
    xlist:属性数据值(float)
    nrows:数据行数
    ncols:数据列数
    x:numpy.array格式的数据值
    y:numpy.array格式的标签值
    winename:numpy.array格式的属性名称
    feature_importance:属性重要性数组
    sorted_idx:numpy.array类型索引
    """
    xlist = []
    lables = []
    names = []
    firstline = True
    for line in data:
        if firstline:
            names = line.strip().split(b';')
            firstline = False
        else:
            row = line.strip().split(b';')
            lables.append(float(row[-1]))
            row.pop()
            floatrow = [float(num) for num in row]
            xlist.append(floatrow)
    
    nrows = len(xlist)
    ncols = len(xlist[1])
    
    x = numpy.array(xlist)
    y = numpy.array(lables)
    winenames = numpy.array(names)
    
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=531)
    mse_oos = []
    feature_importance = []
    n_tree_list = range(50, 500, 10)
    for i_trees in n_tree_list:
        depth = None
        max_feat = 4
        wine_random_forest_modal = ensemble.RandomForestClassifier(n_estimators=i_trees, max_depth=depth, max_features=max_feat,
                                                               oob_score=False, random_state=51)
        wine_random_forest_modal.fit(x_train, y_train)
        prediction = wine_random_forest_modal.predict(x_test)
        mse_oos.append(mean_squared_error(y_test, prediction))
    
    
    print("MSE")
    print(mse_oos[-1])
    
    plot.plot(n_tree_list, mse_oos)
    plot.xlabel("number of trees")
    plot.ylabel("variance")
    plot.show()
    
    random_forest_modal = ensemble.RandomForestClassifier(
        n_estimators=500, max_depth=None, max_features=4,
        oob_score=True, random_state=51)
    random_forest_modal.fit(x, y)
    score = random_forest_modal.oob_score_
    feature_importance = random_forest_modal.feature_importances_
    
    print("准确率:", score)
    
    
    feature_importance = feature_importance/feature_importance.max()
    
    sorted_idx = numpy.argsort(feature_importance)
    bar_pos = numpy.arange(sorted_idx.shape[0])+0.5
    
    plot.barh(bar_pos, feature_importance[sorted_idx], align='center')
    plot.yticks(bar_pos, winenames[sorted_idx])
    plot.xlabel("variable importance")
    plot.show()
    

    输出:

    准确率: 0.7223264540337712
    

    分析测试的相对重要性分布图如图 3所示。图中显示了11个相关参数的完整输入,因为在每个模拟中可以选择不同的变量组。在一些情况下,获得的结果证实了酿酒学理论。例如,酒精的增加往往导致更高品质的葡萄酒。
    在这里插入图片描述

    在这里插入图片描述
    RF方法不会随着决策树的增加而产生过度拟合的问题,但要注意的是可能会产生一定限度内的泛化误差。

    4. 参考文献

    [1] Breiman L. Random forests[J]. Machine learning, 2001, 45(1): 5-32.
    [2] Zhou Z H. Ensemble methods: foundations and algorithms[M]. CRC press, 2012.
    [3] 周志华. 机器学习[M]. 清华大学出版社, 2016.
    [4] https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#inter

    展开全文
  • 随机森林应该这么理解随机森林是什么基本概念随机森林的理解随机森林的过程算法实现与举例 随机森林是什么 随机森林还是一种决策算法,是有多个决策树组成的集成学习方法,只是在决策树的构成中引入了随机性。 基本...
  • 随机森林 随机森林(Random Forest)是利用多棵树对样本进行训练并预测的一种分类器。简单地说,随机森林就是由多棵CART(Classification and Regression Tree)构成的。 对于每棵树而言,它们使用的训练集是从总...
  • GBDT的初始化是一个叶节点,而不是生成一个树(随机森林)或树桩(AdaBoost)。这个叶节点代表所有样本的初始预测值。 GBDT与AdaBoost的对比: 两者都是利用前面模型的误差调节当前模型 两者都要构建固定大小的树...
  • 作者 | deephub 责编 | 王晓曼 出品 | CSDN博客 ...举例来说,随机森林算法中树的数量就是一个超参数,而神经网络中的权值则不是超参数。 其它超参数有: 神经网络训练中的学习率 支持向量
  • 2.2 简单算法举例 21 2.3 算法的特性 24 2.4 怎样表示一个算法 24 2.4.1 用自然语言表示算法 24 2.4.2 用流程图表示算法 24 2.4.3 三种基本结构和改进的流程图 28 2.4.4 用N-S 流程图表示算法 29 2.4.5 用伪代码表示...
  • 2.2 简单算法举例 21 2.3 算法的特性 24 2.4 怎样表示一个算法 24 2.4.1 用自然语言表示算法 24 2.4.2 用流程图表示算法 24 2.4.3 三种基本结构和改进的流程图 28 2.4.4 用N-S 流程图表示算法 29 2.4.5 用伪代码表示...
  • 笔者希望该笔记能够记录每个机器学习算法的过拟合问题。...一、随机森林不会发生过拟合的原因   在建立每一棵决策树的过程中,有两点需要注意 - 采样与完全分裂。首先是两个随机采样的过程,ran
  • 6.集成学习

    2021-01-19 20:06:04
    异常检测四、Bagging—AdaBoost算法1.AdaBoost算法2.AdaBoost算法举例五、Boosting—GBDT算法1.提升树2.梯度提升树六、Boosting—XGBoost1.XGBoost公式推导2.XGBT 一、集成学习简介 二、Voting—投票 1.硬投票分类...
  • 目录 一、什么是集成学习(三个臭皮匠顶个诸葛亮) 二、 Bagging和Boosting算法族介绍 1、Bagging(Bootstrap AGGregating, 装...1.2 随机森林(Random Forest, RF)= Bagging + 决策树 ​ 1.2.1 举例解释随机...
  • AI基础概念学习

    2017-07-20 11:31:06
    3.机器学习算法(有效的学习算法举例): 随机森林:可创建众多决策树来优化预测 叶贝斯网络:可利用概率法来分析变量和变量之间的关系 支持向量机:提供分类的实例给它,它就能创建模型,然后分配新的输入给其中一...
  • 参数和超参数

    2020-11-09 16:35:34
    欢迎关注博主的公众号:happyGirl的异想世界。... 随机森林 同上 决策树的数量,输入变量的数量 支持向量机 支持向量(support vector)的选择,每个支持向量的拉格朗日乘数 核(kernel)
  • day06-----机器学习介绍

    2020-03-03 15:50:43
    随机森林 XGBoost k-NN Bayes分类 无监督 PCA 规则关联(推荐) k-Means 2.以线性回归为例进行机器学习入门 2.1 numpy实现 线性回归的场景 数据呈现正比关系。 线性回归举例(身高与...
  • 目录(?)[-] 集成学习概念ensemble learning ...典型Bagging算法RF随机森林 结合策略 平均法 排名平均 投票法 学习法Stacking generalization blend stacking和blending的区别 贝叶斯模型平均B...
  • 分析随机森林的特点2. 提升1. 概念3. GBDT 梯度提升决策树4. XGBoost算法推导1. 定义树的复杂度2. XGBoost中的Boosting Tree模型3. 对目标函数进行改写4. 树结构的打分函数5. Adaboost算法1. 公式推导2.举例:3. 为...
  • 机器学习特征工程--标准化和归一化

    千次阅读 2019-03-02 19:32:14
    举例随机森林/bagging/boosting/xgboost 需要标准化的(基于距离的模型):回归分析(逻辑回归)/神经网络 / svm 2.相关定义 什么叫归一化(标准化):归一化化就是要把你需要处理的数据经过处理后(通过某种...
  • 方案二(0.94): LDA + 分类模型(knn/决策树/逻辑回归/svm/xgboost/随机森林) a) 决策树效果不是很好,这种连续特征不太适合的 b) 通过参数调整 200 个topic,信息量保存效果较优(计算主题) 方案三(0.72): word...
  • sklearn0.19中文文档

    2018-10-30 15:03:21
    随机森林 1.11.2.2. 极限随机树 1.11.2.3. 参数 1.11.2.4. 并行化 1.11.2.5. 特征重要性评估 1.11.2.6. 完全随机树嵌入 1.11.3. AdaBoost 1.11.3.1. 使用方法 1.11.4. Gradient Tree Boosting(梯度树提升) 1.11....
  • 【集成学习】scikit-learn随机森林调参小结 - sun_shengyun的专栏 - CSDN博客 加州房价预测数据预处理 - 多一点 - 博客园 加州房价预测项目精细解释 - CSDN博客 机器学习:数据预处理之独热编码(One-Hot)_慕课手记...
  • 方案二(0.94): LDA + 分类模型(knn/决策树/逻辑回归/svm/xgboost/随机森林) a) 决策树效果不是很好,这种连续特征不太适合的 b) 通过参数调整 200 个topic,信息量保存效果较优(计算主题) 方案三(0.72): word...
  • 方案二(0.94): LDA + 分类模型(knn/决策树/逻辑回归/svm/xgboost/随机森林) a) 决策树效果不是很好,这种连续特征不太适合的 b) 通过参数调整 200 个topic,信息量保存效果较优(计算主题) 方案三(0.72): word...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

随机森林算法举例