随机森林属于什么算法算法可以结合十折十次交叉验证吗

中的一些方法如决策树随机森林属于什么算法,SVM由于对数据没有分布的假定等普通线性回归模型的一些约束,预测效果也比较不错交叉验证结果也能被接受。下面鉯R中lars包包含数据集diabetes为例说明机器学习中的回归方法

一、数据集及交叉验证办法描述

          Diabetes数据集包含在R的lars包中,数据分为x,y,x2三个部分因变量为y,數据是关于糖尿病的血液化验等指标。这个数据集最早被用在偏最小二乘回归的文章里

 交叉验证采用指标NMSE来评价模型好坏。这一统计量昰计算模型预测性能和基准模型的预测性能之间的比率通常采用目标变量的平均值来作为基准模型。其取值范围通常为0~1如果模型表現优于这个非常简单的基准模型预测,那么NMSE应明显小于1NMSE的值越小,模型的性能就越好NMSE的值大于1,意味着模型预测还不如简单地把所有個案的平均值作为预测值!

       交叉验证办法为将数据集分为5份取4份作为训练集,1份作为测试集共作5次,把误差平均起来作为衡量标准選取代码如下:

        决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法决策树分为汾类树和回归树两种,分类树对离散变量做决策树回归树对连续变量做决策树。

1.选择一个属性放置在根节点为每个可能的属性值产生┅个分支

2.将样本划分成多个子集,一个子集对应于一个分支

3.在每个分支上递归地重复这个过程仅使用真正到达这个分支的样本

4.如果在一個节点上的所有样本拥有相同的类别,即停止该部分树的扩展

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

method根据树末端的数据类型选择相应变量分割方法,本参数有四种取值:连续型“anova”;离散型“class”;计数型(泊松过程)“poisson”;生存分析型“exp”。程序會根据因变量的类型自动选择方法,但一般情况下较好还是指明本参数,以便让程序清楚做哪一种树模型

parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法。

control控制每个节点上的最小样本量、交叉验证的次数、复杂性参量:即cp:complexitypamemeter,这个参数意味着对每一步拆分,模型的拟合优喥必须提高的程度,等等

tree一个回归树对象,常是rpart()的结果对象。

cp复杂性参量,指定剪枝采用的阈值cp全称为complexity parameter,指某个点的复杂度对每一步拆分,模型的拟合优度必须提高的程度,用来节省剪枝浪费的不必要的时间R内部是怎么计算的我不知道,希望读者能够补充

Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数。他是一种框架算法,主要昰通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器他可以用来提高其他弱分类算法的识别率,也就是将其他的弱分类算法作为基分类算法放于Boosting 框架中,通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器;每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器,这样在给定训练轮数 n 后,就可产生 n 个基分类器,然后Boosting框架算法将這 n个基分类器进行加权融合,产生一个最后的结果分类器,在这 n个基分类器中,每个单个的分类器的识别率不一定很高,但他们联合后的结果有很高的识别率,这样便提高了该弱分类算法的识别率。

   这里值得一提的是我在做boosting回归时为了减少工作量直接做了变量选择(这个选择与回归树嘚最终选择是一致的所以也有一定的道理)。最后交叉验证的结果为:测试集NMSE为0.5513152训练集NMSE为0.4656569。比起上次计算的回归树模型测试集NMSE为0.7036484训練集NMSE为0.518876好了不少。四、bagging回归


       与boosting回归想法类似bagging回归的做法就是不断放回地对训练样本进行再抽样,对每个自助样本都建立一棵回归树对於每一个观测,每棵树给一个预测最后将其平均。

五、随机森林属于什么算法回归     与bagging回归相比随机森林属于什么算法则更进一步,不僅对样本进行抽样还对变量进行抽样。     这里值得一提的是随机森林属于什么算法有个十分牛逼的性质,不会出现过拟合现象这也省詓了我们确定树的分类程度等一系列麻烦的事情。得到结果:测试集NMSE为0.训练集NMSE为0.,效果显著提升随机森林属于什么算法还可以输出自變量重要性度量,试运行代码:

六、其他的回归方法      除去我们所说的以上4种方法外还有人工神经网络回归,SVM回归他们可以通过nnet,rminer包中有關函数实现,这里我们从略

   运行结果:测试集NMSE为0.6094071,训练集NMSE为0.4031211这里也仅仅是得到了一个优于回归树,与bagging回归相当不如随机森林属于什麼算法的一个结果。也说明了机器学习方法在实际问题中还是有一定优势的但这绝不意味着这样的回归可以代替OLS,毕竟这些数据挖掘的方法在表达式的简洁程度计算量等诸多方面还是存在着或多或少的不足。

}

基本内容与分类见上述思维导图



、blending、Boosting、 Stacking(在多个基础模型的预测上训练一个机器学习模型)

有3个基础模型,那么就采取投票制的方法投票多者确定为最终的分类。 .

对於回归问题一个简单直接的思路是取平均。稍稍改进的方法是进行加权平均 权值可以用排序的方法确定,举个例子比如A、B、C三种基夲模型,模型效果进行排名假设排名分别是1,23,那么给这三个模型赋予的权值分别是3/6、2/6、1/6 这两种方法看似简单其实后面的高级算法吔可以说是基于此而产生的,Bagging或者Boosting都是一种把许多弱分类器这样融合成强分类器的思想

以下有三类选择权重办法: 使用算法返回最佳权偅;2.使用交叉验证选择权重;3.给更精确的模型赋予高权重

在分类和回归中都可以使用平均集成。在分类中您可以对预测概率进行平均,洏在回归中您可以直接平均不同模型的预测。 .

应用场景:对不稳定的分类器做Bagging是一个好主意在机器学习中,如果训练数据的一个小变囮导致学习中的分类器的大变化则该算法(或学习算法)被认为是不稳定的。

Bagging就是采用有放回的方式进行抽样用抽样的样本建立子模型,对子模型进行训练,这个过程重复多次最后进行融合。大概分为这样两步:

有放回地重复抽样建模 训练子模型

Bagging算法不用我们自己实现随机森林属于什么算法就是基于Bagging算法的一个典型例子,采用的基分类器是决策树R和python都集成好了,直接调用

优势: 在bagging中,基模型不依賴于彼此因此可以平行/并行。 bagging适用于高方差低偏差模型或者你可以说是复杂模型。

Bagging算法可以并行处理而Boosting的思想是一种迭代的方法,烸一次训练的时候都更加关心分类错误的样例给这些分类错误的样例增加更大的权重,下一次迭代的目标就是能够更容易辨别出上一轮汾类错误的样例最终将这些弱分类器进行加权相加。

在bagging集成中各个模型的预测不会彼此依赖。在boosting中你总是试图添加新模型以纠正先湔模型的弱点。因此它是顺序进行而不是平行。 .

Stacking方法其实弄懂之后应该是比Boosting要简单的毕竟小几十行代码可以写出一个Stacking算法。我先从一種“错误”但是容易懂的Stacking方法讲起 基模型的预测标签级联到下一个分类器: 分别把P1,P2,P3以及T1,T2,T3合并,得到一个新的训练集和测试集train2,test2.

过拟合是非瑺非常严重的因此现在的问题变成了如何在解决过拟合的前提下得到P1、P2、P3,这就变成了熟悉的节奏——K折交叉验证

python可以简单实现stacking,但昰R可以直接通过h2o,来进行模型融合

第 j 个学习器,共经过 nfolds 次交叉验证每一次会得到当前验证集角标上的预测值,nfolds 之后得到和初始训练集一樣大小的集合:

即每个第一层学习器在每次 fold 时用学习器对初识测试集进行预测,n 次之后对所有结果取平均值,得到第 j 个学习器在测试集上的预测结果:

这样第一层的每个学习器都会得到一列训练数据和一列测试数据为第二层的学习器所用。

stacking和Blending常常同时被提及Stacking实际上僦是把Blending组合起来,Blending只有一层而Stacking有多层。 用不相交的数据训练不同的 Base Model将它们的输出取(加权)平均。 把原始的训练集先分成两部分比洳70%的数据作为新的训练集,剩下30%的数据作为测试集

  • 第一层,我们在这70%的数据上训练多个模型然后去预测那30%数据的label。
  • 第二层我们就直接用这30%数据在第一层预测的结果做为新特征继续训练即可。

1.比stacking简单(因为不用进行k次的交叉验证来获得新特征)

2.由于两层使用的数据不同所以避免了一个信息泄露的问题。

3.在团队建模过程中不需要给队友分享自己的随机种子。

1.由于blending对数据集这种划分形式第二层的数据量比较少。

2.由于第二层数据量比较少所以可能会过拟合

  • stacking,类似blending。首先直接用所有的训练数据对第一层多个模型进行k折交叉验证,这样每個模型在训练集上都有一个预测值然后将这些预测值做为新特征对第二层的模型进行训练。相比blendingstacking两层模型都使用了全部的训练数据。
  • Blending:也是两层把原始的训练集先分成两部分,比如70%的数据作为新的训练集剩下30%的数据作为测试集。第一层我们在这70%的数据上训练多个模型然后去预测那30%数据的label。 在第二层里我们就直接用这30%数据在第一层预测的结果做为新特征继续训练即可。

本杂记摘录自文章《开发 | 为什么说集成学习模型是金融风控新的杀手锏》 随机森林属于什么算法:决策树+bagging=随机森林属于什么算法 梯度提升树:决策树Boosting=GBDT

随机森林属于什么算法的原理是基于原始样本随机抽样获取子集,在此之上训练基于决策树的基学习器然后对基学习器的结果求平均值,最终得到预測值 随机抽样的方法常用的有放回抽样的booststrap,也有不放回的抽样RF的基学习器主要为CART树(Classification And Regression Tree)

CART会把输入的属性分配到各个叶子节点,而每个葉子节点上面都会对应一个实数分数有人可能会问它和决策树(DT)的关系,其实我们可以简单地把它理解为决策树的一个扩展从简单嘚类标到分数之后,我们可以做很多事情如概率预测,排序

首先使用训练集和样本真值(即标准答案)训练一棵树,使用这棵树预测訓练集得到每个样本的预测值,由于预测值与真值存在偏差所以二者相减可以得到“残差”。 接下来训练第二棵树此时使用残差代替真值作为标准答案,两棵树训练完成后可以再次得到每个样本的残差。然后进一步训练第三棵树以此类推,树的总棵数可以人为指萣也可以监控某些指标如验证集上的误差来停止训练。

比如我们使用两棵树来预测一个人是否喜欢电脑游戏如上图所示,在预测新样夲时每棵树都会有一个输出值,将这些输出值相加就可得到样本最终的预测值,故小男孩和老人的预测值分别为两棵树预测值的加和 . .

Machine的一个c++实现,作者为正在华盛顿大学研究机器学习的大牛陈天奇他在研究中深感自己受制于现有库的计算速度和精度,因此在一年前開始着手搭建xgboost项目并在去年夏天逐渐成型。xgboost最大的特点在于它能够自动利用CPU的多线程进行并行,同时在算法上加以改进提高了精度咜的处女秀是Kaggle的希格斯子信号识别竞赛,因为出众的效率与较高的预测准确度在比赛论坛中引起了参赛选手的广泛关注在1700多支队伍的激烮竞争中占有一席之地。随着它在Kaggle社区知名度的提高最近也有队伍借助xgboost在比赛中夺得第一。

为了方便大家使用陈天奇将xgboost封装成了Python库。峩有幸和他合作制作了xgboost工具的R语言接口,并将其提交到了CRAN上也有用户将其封装成了julia库。python和R接口的功能一直在不断更新大家可以通过丅文了解大致的功能,然后选择自己最熟悉的语言进行学习

本杂记摘录自文章《开发 | 为什么说集成学习模型是金融风控新的杀手锏?》

現金贷场景为例给大家看一下直观的例子:比如我们针对互联网行为、APP、运营商等得到不同Feature Domain诸如信贷历史、消费能力、社会信用等子模型。我们再将其通过XGboost、LightGBM等最先进的集成学习模型框架进行输出就可以在反欺诈、违约概率预测、风险定价等风控业务上都可以得到广泛嘚应用和提升。

事实上这不仅解决了机构不同维度/领域数据使用的难题,因为集成学习框架可以支持不同类型模型算法作为子模型同時也帮助金融客户实现了更高效准确的针对稀疏、高维、非线性数据的建模过程,大大简化繁琐的特征工程使得我们的模型具有更强的嫆错和抗扰动能力。 值得一提的是集成学习模型框架也更易于实现领域知识迁移,单独领域的子模型可以快速迁移应用到新业务领域幫助我们金融机构实现新金融业务的快速成型和持续迭代优化。大型成熟金融场景中的实践也证明集成学习模型除了在稳定性和泛化能仂上相对传统模型有极大增强,在最终的效果上也显现出了超出想象的作用相对成熟的逻辑回归模型最大ks值累积提升已经可以达到约70%及鉯上。


延伸一:集成学习一些经验

1、集成学习也适用于非监督式学习方法:

2、分类器越多样越有效、模型之间差异要大 集成是一门将多種学习者(个体模型)组合在一起以提高模型的稳定性和预测能力的学问。因此创建多样化模型的集成是得到更好的结果的非常重要的┅个因素。 集成建模成员之间较低的相关性可以提高模型的误差校正能力所有在集成建模时,优选使用具有低相关性的模型

3、弱模型吔有好处:不会过拟合 能力较弱的学习者(模型)对于问题的某一特定部分都比较确定。因此低方差和高偏差的能力较弱的学习者往往不会過度拟合。 且弱模型能力较弱的学习者(模型)的集成也可以产生一个好的模型

4、超多模型时候,如何进行选择

您可以应用这两种算法在逐步向前选择中,您将从预测开始一次添加一个模型的预测如果这样提高了整体的精度。在逐步向后消除中你将从全部特征开始并且┅个一个的移除模型预测,如果在移除模型的预测后提高了精度

  • 向集成中一个一个的添加模型预测(或者取平均值),这样提高了验证集中的指标
  • 从具有验证集合的最大性能的嵌套集合中返回集成

5、dropout也是一种好办法较多在神经网络 因为在Dropout中,权重是共享的并且子网络嘚集成是一起训练的。

子网络通过“丢弃”神经元之间的某些连接而一起训练 模型能力随随机失活率(dropout rate)的增加而减少。 .

延伸二:美团机器學习模型实践

模型这件事儿许多时候追求的不仅仅是准确率,通常还有业务这一层更大的约束如果你在做一些需要强业务可解释的模型,比如定价和反作弊那实在没必要上一个黑箱模型来为难业务。这时候统计学习模型就很有用,这种情况下比拼性能的话,我觉嘚下面这个不等式通常成立:glmnet > LASSO >= Ridge > LR/Logistic. 相比最基本的LR/Logisticridge通过正则化约束缓解了LR在过拟合方面的问题,lasso更是通过L1约束做类似变量选择的工作

不过两個算法的痛点是很难决定最优的约束强度,glmnet是Stanford给出的一套非常高效的解决方案所以目前,我认为线性结构的模型glmnet 的痛点是最少的,在R、Python、Spark上面都开源了

一种是把相互独立的cart (randomized variables, bootstrapsamples)水平铺开,一种是深耕的boosting在拟合完整体后更有在局部长尾精细刻画的能力。同时gbdt模型相仳rf更加简单,内存占用小这都是业界喜欢的性质。xgboost在模型的轻量化和快速训练上又做了进一步的工作也是目前我们比较喜欢尝试的模型。

}

我要回帖

更多关于 森林算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信