随机森林参数调优 随机森林参数调整

莫娜号 1

理论:随机森林-枝剪问题

决策树(decision tree)是一种基本的分类与回归方法,本文主要讨论用于分类的决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的,也可以认为是定义在特征空间与类空间上的条件概率分布,其主要优点是模型具有可读性,分类速度快。决策树学习通常包括三个步骤:特征选择,决策树的生成和决策树的修剪。而随机森林则是由多个决策树所构成的一种分类器,更准确的说,随机森林是由多个弱分类器组合形成的强分类器。

通常情况下, 随机森林不需要后剪枝。

随机森林参数调优 随机森林参数调整随机森林参数调优 随机森林参数调整


随机森林参数调优 随机森林参数调整


剪枝的意义是:防止决策树生成过于庞大的子叶,避免实验预测结果过拟合,在实际生产中效果

剪枝通常有两种:

PrePrune:预剪枝,及varImpPlot(rf)早的停止树增长,在每个父分支的时候计算是否达到了限制值

剪枝的依据:

常见的有错误率校验(判断枝剪是降低了模型预测的正确率),统计学检验,熵值,代价复杂度等等

总结看来,枝剪的目的是担心全量数据在某棵树上的拟合过程中,过度判断了每个点及其对应类别的关系,有如以下这张图(以rule1&rule2代替了rule3):

-----------------------------------------------------------------------------------------------------------------------------

随机森林:

1.通常我们会规定随机森林里面的每棵树的选参个数,常见的有log,sqrt等等,这样的选取是随机选则的,这样有一个好处,让每一棵树上都有了尽可能多的变量组合,降低过拟合程度

2.树的个数及树的的变量个数,通常曲线振荡很频繁, 比例度盘要放大。的来说,最快捷的方式是先确定的变量个数为sqrt(变量的个数),然后在根据oob的准确率反过来看多个棵树时,确定了树的个数的时候再反过来确定mtry的个数,虽然有局限,但是也并不存在盲目性

3.我个人理解,随机森林中的每一棵树我们需要它在某一片的数据中有非常好的拟合性,它并不是一个全数据拟合,只需要在它负责那块上有的拟合效果。每次遇到这些数据(特征)的时候,我们在汇总N棵树的结果的时候,给这些数据对应的那块模型以权重即可

总结一下,就是随机森林里面的每棵树的产生通过选特征参数选数据结构,都已经考虑了避免共线性避免过拟合,剩下的每棵树需要做的就是尽可能的在自己所对应的数据(特征)集情况下尽可能的做到的预测结果;如同,公司已经拆分好部门,你不需要考虑这样拆分是不是公司运营的一个组合方式,你需要做的就是当公司需要你的时候,尽可能的做好自己的事情,就酱。

随机森林分类和回归区别

set.seed(1234)#设置随为每一个训练子集分别建立一棵决策树,生成N棵决策树从而形成森林,每棵决策树不需要剪枝处理。机数种子--使每次运行时产生的一组随机数相同,便于结果的重现

随机森林分类和回归区别如下ind<-sample(2,nrow(iris),replace = TRUE,prob=c(0.7,0.3))。

1、当因变量Y是分类变量时,是分类,当因变量Y是连续变量时,是回归。

随机森林为什么不会过度拟合

PostPrune:后剪枝,基于完全生长(过拟合)的树上进行剪枝,砍掉一些对衡量函数影响不大的枝叶

来源:知乎

由于上面两个随机采样(从原始训练集中随机产生N个训练子集用于随机生成N颗决策树和在针对每个样本集构建决策树过程中随机地选择m个属性)的过程保证了随机性,所以不会出现过拟合over-fitting。随机森林中的每一棵数分类的能力都很弱,但是多棵树组合起来就变的NB,因为每棵树都精通某一方面的分类,多棵树组成一个精通不同领域的决策专家。

谢宇杰

大型机软件工程师

不是不会过拟合,而是在满足一定的条件下不容易过拟合。特征参数要足够多,特征参数之间相关性尽量低。

知乎用户

Breiman的这句话完全错误,根本没有不过拟合的学习方法!

对于随机森林来说: 在有躁音的情况下(注意,现实世界应用中躁音不能忽略),树太少很容易过拟合,增加树可以减小过拟合#利用全部数据建模,但没有办法完全消除过拟合,无论你怎么增加树都不行。

随机森林

决策树主要流行的算法有ID3算法,C4.5算法、CART算法,主要花费时间在建决策树和剪枝过程中,但一旦建成决策树,由于他是树形结构能够直观的显示出模型,而且在后期的分类过程中也比较容易分类,但决策树有一些不好的地方,比如容易过拟合。为了减少决策树的不足,近年来又提出了许多模型组和+决策树的算法,这些算法都是生成N棵决策树,虽然这N棵树都很简单,但是它们综合起来就很强大了,有点类似与adaboost算法。

随机森林主要思想是先对原始样本随机选出N 个训练子集用于随机生成N颗决策树,针对每个样本集在构建决策树的选择属性进行划分时是随机选择m个属性,而不是像常用的决策树将所有的属性参与选择,再由这些决策树构成一个森林,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。

随机森林算法三个步骤:

(1)为每棵决策树抽样产生训练集

(2)构建决策树

由于随机森林在进行分裂时,随机地选择某m个属性(一般是随机抽取指定logM +1个随机特征变量,m<

(3)森林的形成

随机森林算法最终的输出结果根据随机构建的N棵决策子树将对某测试样本进行分类,将每棵子树的结果汇总,在所得到的结果中哪个类别较多就认为该样本是那个类别。

随机森林优缺点

优点:

1、随机森林可以处理高维数据,并确定变量的重要性,是一个不错的降维方法;

2、对数据缺失,随机森林也能较好地保持性;

3、当存在分类不平衡的情况时,随机森林能够提供平衡数据集误的有效方法;

缺点:

1、随机森林算法可以解决回归问题,但是由于不能输出一个连续型值和作出超越训练集数据范围的预测,导致在对某些噪声的数据进行建模时出现过度拟合;

2、随机森林算法类似于黑盒子,由于几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

决策树与随机森林——原理篇(二)

1、训练集里面有噪音数据,干扰了正常数据的分支

篇我们主要关注了根结点及内部结点的选择

z0<-table(iris[,5],predict(a,iris)$class)

第二篇主要关注如何处理“过拟合”现象

2、默认mtry是p/3而不是p1/2,其中p表示预测变量数,默认大小为5而不是1。

参考

个性化 与 泛化 是一个相互矛盾概念,就像个体化诊疗与指南的矛盾一样。

决策树对训练数据可以得到很低的错误率,但是运用到测试数据上却得到非常高的错误率,这就是“过拟合现象”。

具体解释如下:对于决策树,我们希望每个叶子分的都是正确的,所以在不加限制的情况下,决策树倾向于把每个叶子单纯化,那如何最单纯呢?极端情况下,就是每个叶子只有一个样本,那这样,这个模型在建模集的准确率就非常高了。但是,这又带来了一个问题——过拟合,这会导致该模型在建模集效果显著,但是验证集表现不佳。

这可能有以下几个原因:

2、训练集不具有特征性

3、特征太多

使用信息增益来种树时,为了得到的决策树,算不惜带价倾向于将熵值降为最小(可能的话甚至为0),这颗树会显得非常的冗杂。

通过限制复杂度参数(complexity parameter),抓主要矛盾,来防止模型的过拟合。具体的计算过程可以参考<医学僧的科研日记>,这里我直接引用

剪枝(pruning)则是决策树算法对付过拟合的主要手段,剪枝的策略有两种如下:

定义:预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,如果当前结点的划分不能带来决策树模型泛化性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。

相比于预剪枝,后剪枝往往应用更加广泛,

随机森林不适合小样本量吗

向后删除:是指每次从特征全集中每次删除一个特征变量能使模型预测或分类效果,退出后不进来,直到模型改善效果不再明显;

适## xval是10折交叉验证合。

#利用模型预测

随机森林已经被证明是一种高效的分类与特征选择方法,尽管参数的设置对结果影响较小,但合适的参数可以使分类器得到理想的效果。

主要针对癌症研究中小样本不均衡数据的分类和特征选择问题,研究了随机森林中类权重的设置,为了比较在不同的类权重下特征。

随机森林怎样才能高耗时?

参考:信息增益表示得知特征A的信息而使得数据X的信息的不确定性的程度。

随机森林运行耗时长 数据量近六万,变量个数300左右,运用十折交叉验证在R中运行随机森林,模型跑了一天还是没有出结果;

随机森林,如果想人员q<-sum(diag(z))/sum(z)高耗时的话,很简单呀,只要经常的使用,肯定是高耗时的那一种

调参是什么

根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。

调参的方式总是根据数据的状况而定,所以没有办法一概而论;其二是因为,其实大家也都没有特别好的办法。

拓展知识:

通过画学习曲线,或者网格搜索,我们能够探索到调参边缘(代价可能是训练一次模型要跑三天三夜),但是在现实中,高手调参恐怕还是多依赖于经验,而这些经验,来源于:1)非常正确的调参思路和方法,2)对模型评估指标的理解,3)对数据的感觉和经验,4)用洪荒之力去不断地尝试。

那我们首先来讲讲正确的调参思路。模型调参,步是要找准目标:我们要做什么?一般来说,这个目标是提升某个模型评估指标,比如对于随机森林来说,我们想要提升的是模型在未知数据上的准确率(由score或oob_score_来衡量)。找准了这个目标,我们就需要思考:模型在未知数据上的准确率受什么因素影响?在机器学习中,我们用来衡量模型在未知数据上的准确率的指标,叫做泛化误(Genelization error)。

泛化误

当模型在未知数据(测试集或者袋外数据)上表现糟糕时,我们说模型的泛化程度不够,泛化误大,模型的效果不好。泛化误受到模型的结构(复杂度)影响data("iris")。看下面这张图,它准确地描绘了泛化误与模型复杂度的关系,当模型太复杂,模型就会过拟合,泛化能力就不够,所以泛化误大。当模型太简单,模型就会欠拟合,拟合能力就不够,所以误也会大。只有当模型的复杂度刚刚好的才能够达到泛化误最小的目标。

那模型的复杂度与我们的参数有什么关系呢?对树模型来说,树越茂盛,深度越深,枝叶越多,模型就越复杂。所以树模型是天生位于图的右上角的模型,随机森林是以树模型为基础,所以随机森林也是天生复杂度高的模型。随机森林的参数,都是向着一个目标去:减少模型的复杂度,把模型往图像的左边移动,防止过拟合。当然了,调参没有,也有天生处于图像左边的随机森林,所以调参之前,我们要先判断,模型现在究竟处于图像的哪一边。

泛化误的背后其实是“偏-方困境”,原理十分复杂,无论你翻开哪一本书,你都会看见长篇的数学论证和每个字都能看懂但是连在一起就看不懂的文字解释。在下一节偏vs方中,我用最简单易懂的语言为大家解释了泛化误背后的原理,大家选读。那我们只需要记住这四点:

1)模型太复杂或者太简单,都会让泛化误高,我们追求的是位于

参数整定找, 从小到大顺序查。

先是比例后积分, 再把微分加。

曲线漂浮绕大弯, 比例度盘往小扳。

曲线偏离回复慢, 积分时间往下降。

曲线波动周期长, 积分时间再加长。

曲线振荡频率快, 先把微分降下来。

决策树与随机森林

随机森林算法采用Bagging抽样技术从原始训练集中产生N 个训练子集(设要随机生成N颗决策树),每个训练子集的大小约为原始训练集的三分之二,每次抽样均为随机且放回抽样,这样使得训练子集中的样本存在一定的重复,这样做的目的是为了在训练的时候,每一棵树的输入样本都不是全部的样本,使森林中的决策树不至于产生局部解。

本文将先对决策树特征选择的算法ID3, C4.5和CART进行计算,然后介绍决策树的剪枝策略,介绍随机森林。

re<-predict(fit,testData)

在 信息论 中, 条件熵 描述了在已知第二个随机变量X的前提下,随机变量Y的信息熵还剩多少。基于X条件的Y的信息熵,用H(Y|X)表示。

如果H(Y|X=x)为变数Y在变数X取特定值x条件下的熵,那么H(Y|X)就是H(Y|X=x)在X取遍所有可能的x后取平均的结果。

首先需要知道的是熵的公式:

条件熵的推导公式如下:

决策树分类从根开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子。每一个子对应着该特征的一个取值。如此递归地对实例进行测试并分配,直至达到叶,将实例分配到叶的类中。

决策树学习的算法通常是一个递归地选择特征,并根据该特征对训练数据进行划分。如果利用一个特征进行分类的结果与随机分类的结果没有很大别,则称这个特征是没有分类能力的。通常特征选择的准则是信息增益或信息增益比,特征选择的常用算法有ID3,C4.5,CART。

信息增益定义:特征A对训练数据集D的信息增益g(D, A)定义为D的经验熵H(D)与给定特征A的条件下D的经验条件熵H(D|A)之,即:

根据信息增益选择特征的方法是:对于给定数据集D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益的特征。使用信息增益选择特征的算法称为C3算法。

信息增益值的大小是相对于训练数据集而言的,并没有意义。在分类为题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大。反之,信息增益值会偏小。因此,使用信息增益比可以对这一问题进行校正,这是另一种特征选择算法,也即C4.5算法。

信息增益比定义 :特征A对训练数据集D的信息增益比g R (D, A)定义为其信息增益g(D, A)与训练集D的经验熵之比:

基尼指数是CART分类树用来选择特征的算法,同时决定了该特征的二值切分点。

定义:设有K个类,样本点属于第k类的概率为p k ,则概率分布的基尼指数定义:

对于给定的样本D,其基尼指数为:

一个特征的信息增益/基尼系数越大,表明特征对样本的熵减少的能力更强,这个特征使得数据由不确定性变成确定性的能力越强。

决策树生成算法产生的决策树对于训练数据的分类往往很准确,但对于未知数据的分类却没有这么准确,即容易出现过拟合情况。解决的办法便是考虑树的复杂度,对已生成的树进行剪枝简化。

决策树的剪枝往往通过极小化决策树整体的损失函数来实现。

设树T的叶个数为|T|,t是树T的叶,该叶有N t 个样本点,其中k类的样本点有N tk 个,k=1,2,3...K, H t (T)为叶t上的经验熵, α>=0为参数,则决策树学习的损失函数可以定义为:

损失函数中C(T)表示模型对训练数据的预测误,也即拟合程度。|T|表示模型复杂度,即越多模型越复杂,使用参数α来控制两者之间的影响。α越大模型越简单,对数据拟合;α越小模型越复杂,对数据拟合性好;α=0时则不考虑模型复杂度。

因此,剪枝就是在确定了α时,定义:它是一种模型组合(常见的Boosting,Bagging等,衍生的有gbdt),这些算法最终的结果是生成N(可能会有 几百棵 以上)棵树, 组合判断最终结果 。选择损失函数最小的树。

《统计学习方法》李航

机器学习. 邹博

大数据模型建模方法

当然不同的算法使用的衡量的标准不同,还有:信息增益比、基尼不纯系数

大数据模型建模方法主要包括以下几种: 1. 数据清洗:这是大数据建模的步,主要目的是去除数据中的噪声、缺失值、异常值等,为后续的数据分析做好准备。数据清洗的方法包括数据过滤、数据填补、数据转换等。

二、特征选择

2. 数据探索:在数据清洗之后,需要进行数据探索,了解数据的分布、特征和关系。这可以通过可视化工具实现,也可以通过编写代码进行统计分析。 3. 模型选择:根据数据的特点和问题需求,选择合适的模型进行建模。例如,如果你需要解决分类问题,可以使用逻辑回归、支持向量机、决策树或随机森林等模型;如果你需要解决回归问题,可以使用线性回归、岭回归、梯度提升机等模型。

4. 参数优化:选择好模型后,需要对模型的参数进行优化,以提高模型的性能。优化方法包括网格搜索、随机搜索、贝叶斯优化等。 5. 模型评估:在模型训练完成后,需要进行模型评估,以确定模型的性能和准确性。常用的评估指标包括准确率、率、召回率、F1得分等。

6. 模型部署:,需要对模型进行部署,以便在实际场景中使用。这可能涉及到将模型集成到现有的数据处理和应用程序中。

在大数据建模过程中,通常还需要考虑一些特殊的问题,例如大数据的存储和管理、分布式计算框架的选择、模型的并行化等。这些问题的解决方案可能会根据具体特征选择是指在原有数据特征的基础上,去除重要性比较低的特征变量,过滤出有用的特征变量。这里比较困难的是搞清楚什么样的特征比较重要?这需要根据具体的问题具体分析,有些变量的选择可以很直观的看出来,但这种直觉也不一定正确。对于常用特征选择方法主要有:过滤型、包装型、内嵌型。的应用场景和需求而有所不同。 总的来说,大数据建模是一个迭代的过程,需要不断地进行数据探索、模型选择、参数优化和模型评估,以找到最适合解决特定问题的模型。同时,随着大数据技术的不断发展,新的建模方法和工具也在不断涌现,为大数据建模提供了更多的可能性。

R语言之决策树和随机森林

如何组合判断?

R语言之决策树和随机森林

f<-Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

总结决策树之前先总结一下特征的生成和选择,因为决策树就是一种内嵌型的特征选择过程,它的特征选择和算法是融合在一起的,不需要额外的特征选择。

一、特征生成:

特征生成是指在收集数据之时原始数据就具有的数据特征,这些数据特征由收集的数据决定(其实也就是在产品定型时设定的需要收集的数据特征),当然,在数据预处理时,也可以在此基础上构造一些新的数据特征,这些特征越多越好,表示你考虑问题比较周全,具体那些变量有用或没用,这要交给下一步特征选择来决定。

过滤型:是指你可以根据某个统计量的大小排序来选择特征变量,如相关系数、p值、R值等

包装型:是指在一个特征中选取的特征子集。具体需要考虑:用什么样的算法来选取?选取的的标准是什么?

常用的算法是分步回归包括向前搜索、向后删除、双向搜索

向前搜索:每次选取一个能使模型预测或分类效果的特征变量进来,进来后不退出,直到模型改善效果不再明显;

双向搜索:是指每次每次删除一个特征变量或加入一个特征变量能使模型预测或分类效果,退出的不进来,进来的不退出,直到模型改善效果不再明显;

这里再提一下特征变量选择的几个标准:p值、R值、AIC(越小效果越好)、BIC(越小效果越好)、熵(越小效果越好)

内嵌型:这里应该主要就是像决策树这样的情况,算法内部完成特征变量的选取。

三、决策树

决策的几个要点:1、如何决策?(也就是如何树如何分叉)------熵和信息增益---这里面包含的就是特征的选择?哪个特征变量包含的信息量大,就排在前面,至于树的深度就决定特征变量的个数。

2、如何剪枝?-----一般是事后剪枝

3、连续性变量如何离散化?-----阈值的选择

熵:是指信息的混合程度(混乱程度),熵【0-1】越大表示该中混合的信息越多,也就表明这次的分叉效果不好还是有很多不同类的信息混在一起

信息增益:熵值的减少量,越大越好

决策树模型特点:模型易于解释;存储空间较小,以树的形式存储,决策树是一个弱分类器,不能完全分类,需要把多个弱分类器通过多数投票法组合在一起。

四、R包实现决策树

library(rpart)

library(rpart.plot)

## rpart.control对树进行一些设置

## minsplit是最小分支数,这里指大于等于20,那么该会继续分划下去,否则停止

## minbucket:叶子最小样本数

## maxdepth:树的深度

## cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度

ct <- rpart.control(xval=10, minsplit=20, cp=0.1)

## kyphosis是rpart这个包自带的数据集

## na.action:缺失数据的处理办法,默认为删除因变量缺失的观测而保留自变量缺失的观测。

## mod:树的末端数据类型选择相应的变量分割方法:

## 连续性mod=“anova”,离散型mod=“class”,计数型mod=“poisson”,生存分析型mod=“exp”

## parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和rmation)

## cost是损失矩阵,在剪枝的时候,叶子的加权误与父的误进行比较,考虑损失矩阵的时候,从将“减少-误”调整为“减少-损失”

data("Kyphosis")

fit <- rpart(Kyphosis~Age + Number + Start,data=kyphosis, mod="class",control=ct,parms = list(prior = c(0.65,0.35), split = "rmation"));

## 作图有2种方法

## 种:

par(mfrow=c(1,3));plot(fit); text(fit,use.n=T,all=T,cex=0.9)

## 第二种,这种会更漂亮一些:

rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102,

shadow.col="gray", box.col="green",

border.col="blue", split.col="red",

split.cex=1.2, main="Kyphosis决策树");

## rpart包提供了复杂度损失修剪的修剪方法,printcp会告诉分裂到每一层,cp是多少,平均相对误是多少

## 交叉验证的估计误(“xerror”列),以及标准误(“xstd”列),平均相对误=xerror±xstd

printcp(fit)

## 通过上面的分析来确定cp的值

##调用CP(complexity parameter)与xerror的相关图,一种方法是寻找最小xerror点所对应

#的CP值,并由此CP值决定树的大小,另一种方法是利用1SE方法,寻找xerror+SE的最小点对应的CP值。

plotcp(fit)

##利用以下方法进行修剪:

## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])

fit2 <- prune(fit, cp=0.01)

ndata=data.frame(...)

predict(fit,newdata=ndata)

#案例

str(iris)

#抽样:从iris数据集中随机抽70%定义为训练数据集,30%为测试数据集(常用)

#这里是对行抽样,ind是一个只含1和2的向量

ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))

trainData <- iris[ind==1,]

testData <- iris[ind==2,]

#训练数据

fit<-rpart(f,trainData)

#预测

#或者用其他包

library(party)

#建立决策树模型预测花的种类

myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

iris_ctree <- ctree(myFormula, data=trainData)

# 查看预测的结果

z<-table(predict(iris_ctree), trainData$Species)

#可以根据以上列联表求出预测的正确率---评估模型

#计算准确度

五、机器集成与随机森林法则

前面说过,决策树的一个特点是:弱分类器,分类不完全,需要利用集成投票的方式来增加度和稳健性。

机器集成算法:对于数据集训练多个模型,对于分类问题,可以采用投票的方法,选择票数最多的类别作为最终的类别,而对于回归问题,可以采用取均值的方法,取得的均值作为最终的结果。主要的集成算法有bagging和adaboost算法。

随机森林:随机森林就是利用机器集成多个决策树,主要有两个参数,一个是决策树的个数,一个是每棵树的特征变量个数。

随机森林特点:度高、稳健性好,但可解释性。(可以知道各个变量的重要性)

R包实现机器集成算法:

#adabag包均有函数实现bagging和adaboost的分类建模

library(adabag)

a<-boosting(Species~.,data=iris)

#计算误率

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

barplot(a$importance)

b<-errorevol(a,iris)#计算全体的误演变

plot(b$error,type="l",main="AdaBoost error vs number of trees") #对误演变进行画图

a<-bagging(Species~.,data=iris)

#计算误率

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

barplot(a$importance)

b<-errorevol(a,iris)#计算全体的误演变

plot(b$error,type="l",main="AdaBoost error vs number of trees") #对误演变进行画图

#5折交叉验证

set.seed(1044) #设定随机种子

samp=c(sample(1:50,25),sample(51:100,25),sample(101:150,25)) #进行随机抽样

a=boosting(Species~.,data=iris[samp,]) #利用训练集建立adaboost分类模

z0<-table(iris[samp,5],predict(a,iris[samp,])$class)#训练集结果

z1<-table(iris[-samp,5],predict(a,iris[-samp,])$class)#测试集结果

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

E1<-(sum(z0)-sum(diag(z0)))/sum(z1)

a=bagging(Species~.,data=iris[samp,]) #利用训练集建立adaboost分类模

z0<-table(iris[samp,5],predict(a,iris[samp,])$class)#训练集结果

z1<-table(iris[-samp,5],predict(a,iris[-samp,])$class)#测试集结果

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

E1<-(sum(z0)-sum(diag(z0)))/sum(z1)

R包实现随机森林:

library(randomForest)

#抽样数据

traning<-iris[ind==1,]

testing<-iris[ind==2,]

#训练数据

rf <- randomForest(Species ~ ., data=traning, ntree=100, proximity=TRUE)

#预测

table(predict(rf),traning$Species)

table(predict(rf,testing),testing$Species)

#查看预测的效果

print(rf)

plot(rf)

#查看重要性#随机森林法则

importance(rf)

什么是随机森林

Bagging是 bootstrap aggregating 。思想就是从总体样本当中 随机取一部分样本进行训练,通过多次这样的结果,进行投票获取平均值作为结果输出 ,这就极大可能的 避免了不好的样本数据,从而提高准确度 。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高------------------。Bagging降低 Variance ,因此采用的都是强学习器。

举个例子 :

设有1000个样本,如果按照以前的思维,是直接把这1000个样本拿来训练,但现在不一样,先抽取800个样本来进行训练,如噪声点是这800个样本以外的样本点,就很有效的避开了。重复以上作,提高模型library(foreign)输出的平均值。

Random Forest(随机森林)是 一种基于树模型的Bagging的优化版本 ,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决 决策树泛化能力弱的 特点。(可以理解成三个臭皮匠顶过诸葛亮)

而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以 帮助我们产生不同的数据集 。 Bagging 策略来源于bootstrap aggregation:从样本集(设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3C4.5CARTSVMLOGISTIC), 重复以上两步m次,获得m个分类器 ,根据这m个分类器的投票结果,决定数据属于哪一类。

每棵树的按照如下规则生成:

一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林 不容易陷入过拟合,并且具有很好得抗噪能力 (比如:对缺省值不敏感)。

总的来说就是随机选择样本数,随机选取特征,随机选择分类器,建立多颗这样的决策树,然后通过这几课决策树来投票,决定数据属于哪一类( 投票机制有一票否决制、少数服从多数、加权多数 )

减小 特征选择个数m,树的相关性和分类能力也会相应的降低 ;增大m,两者也会随之增大。所以关键问题是 如何选择的m (或者是范围),这也是随机森林的一个参数。

优点:

缺点:

其实,该缺失值填补过程类似于系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分类的路径)乃其独特之处。

OOB :

上面我们提到,构建随机森林的关键问题就是 如何选择的m ,要解决这个问题主要依据计算 袋外错误率oob error(out-of-bag error) 。

bagging方法中Bootstrap每次约有 1/3的样本不会出现在Bootstrap所采集的样本中 ,当然也就没有参加决策树的建立,把这1/我们也许无法学到高手们多年累积的经验,但我们可以学习他们对模型评估指标的理解和调参的思路。3的数据称为 袋外数据oob(out of bag) ,它可以用于 取代测试集误估计方法 。

袋外数据(oob)误的计算方法如下:

优缺点 :

这已经经过证明是 无偏估计的 ,所以在随机森林算法中 不需要再进行交叉验证或者单独的测试集来获取测试集误 的无偏估计。

最后修改时间:
风龙废墟风神瞳的秘密
上一篇
武汉包含哪几个城市 武汉包括哪里
下一篇

相关文章