python随机森林筛选变量_⽤随机森林分类器和GBDT进⾏特
征筛选
⼀、决策树(类型、节点特征选择的算法原理、优缺点、随机森林算法产⽣的背景)
1、分类树和回归树
由⽬标变量是离散的还是连续的来决定的;⽬标变量是离散的,选择分类树;反之(⽬标变量是连续的,但⾃变量可以是分类的或数值的),选择回归树;
树的类型不同,节点分裂的算法和预测的算法也不⼀样;
分类树会使⽤基于信息熵或者gini指数的算法来划分节点,然后⽤每个节点的类别情况投票决定预测样本的分类;回归树会使⽤最⼤均⽅误差来划分节点,然后⽤每个节点中样本的均值作为测试样本的预测值;
为什么使用bootstrap?2、决策树的算法:ID
3、C4.5和CART
CART(Classify and regresion tree)算法既可以⽣成分类树,也可以⽣成回归树,但它⽣成的是⼆叉树;既可以处理连续变量也可以处理离散变量;对于分类树使⽤gini不纯度来决定划分节点,对于回归树使⽤最⼩误差准则来划分节点;CART的树特点是可以不断⽣长,需要进⾏剪枝;
思想:递归地将输⼊空间分割成矩形
优点:可以进⾏变量选择,可以克服missing data,可以处理混合预测
缺点:不稳定
ID3是⽤信息增益来决定划分节点,只能处理离散变量;ID3会对特征取值较多的特征有所偏好(⽐如ID号),但这是没有意义的;
C4.5是⽤信息增益率来决定划分节点,可以处理连续值(⽤⼆分法进⾏离散化);可以处理缺省值;⽽且C4.5克服了ID3⼀个重要缺点,它对于取值较多的特征有⼀个惩罚抑制;或者说它对取值较少的特征有所偏好;但它的算法性能较低;可以与ID3结合优势互补来进⾏⼀些效果和性能的优化;
3、决策树是如何选择分裂节点的?
MeanDecreaseAccuracy 和 MeanDecreaseGini
因为⽤“平均精度下降”衡量特征重要性时,是通过随机扰动每个变量(特征)值来看其整体最后的预测误差的,也就是说,除了被扰动的那个特征外,剩余的特征没有变化,⽤这种⽅法造成的最终结果的预测误差来衡量这个被扰动特征的重要性;
GINI指数是衡量节点特征纯度的指标,“gini值平均降低量表⽰所有树的变量分割节点平均减⼩的不纯度”;gini指数是决策树节点分割中除了信息熵以外的另⼀个衡量特征重要性的指标;它表⽰数据集在增加了特征A的作⽤之后,gini指数的增益值最⼤,所以选择A属性作为分裂节点;
⼆、随机森林
1、为什么叫“随机”?
随机森林⾥的每⼀棵决策树的建⽴,不仅对样本进⾏有放回(bootstrap)的随机抽样,还对特征进⾏随机抽样;(即“⾏”抽样,和“列”抽样,是否回放,是可以设定的)
从原始输⼊的N个样本中每次抽取k个样本作为特征⼦集,建⽴m棵分类决策树;抽多少次就建多少棵决策树;
每次抽样样本的size和原始输⼊样本的⼤⼩相同,因为是放回抽样,所以有可能抽到重复的;这可以保证有重复样本被不同决策树分类,这样就可以对不同决策树的分类能⼒做个评价。
特征的随机抽样是指,在建每棵树进⾏每个节点分裂的时候,都随机抽⼀部分特征,然后在这随机抽的部分特征⾥⾯,⽤决策树的特征选择的⽅法(⽐如信息增益,或信息增益率)来决定使⽤最优的特征来作为分裂节点的;
2、随机森林算法的优缺点
优点:
(1)分类结果准确性⾼:
使⽤多棵决策树的投票结果来决定随机森林分类器最终的分类判定结果;
所谓“林⼦⼤了,什么鸟都有”。由于建⽴的多棵决策树中,有不少是随机的效果不好的决策树,但也有少数⾮常优秀的决策树,在对每个样本的投票结果中,不好的树它们的投票是接近随机的,所以他们的投票被相互抵消;最后剩下“优秀”的决策树的投票结果决定了随机森林分类器的最终输出结果,这样的结果提⾼了准确性的同时,也提⾼了模型的泛化能⼒;(The more random, the more robust.)
随机森林算法的“妙处”恰恰在于“随机”⼤法的强⼤,上⾯说的每个节点都从随机选的部分特征⾥⾯选best split的⽅法或许会使得某些表现“好”的特征被多棵树选中,最终导致有的树很像(虽然它们的训练样本不⼀样),这样就不够“随机”了,所以有的使⽤者会在branching的时候(也就是选择划分节点的特
征的时候)再加⼀个随机的处理过程,这样增加算法的稳定性;
(2)⾃带特征筛选机制:
因为“随机化”增加了RF算法的包容性,它可以更⽅便地处理⾼维特征⽽不需要预先进⾏特征筛选;相反,它可以是进⾏特征筛选步骤的⼀种⼿段;
3、随机森林是如何衡量特征的重要性的?
在随机森林中某个特征X的重要性的计算⽅法如下:
(1)对于随机森林中的每⼀颗决策树,使⽤相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.
(2)  随机地对袋外数据OOB所有样本的特征X加⼊噪声⼲扰(就可以随机的改变样本在特征X处的值),再次计算它的袋外数据误差,记为errOOB2.
(3)假设随机森林中有Ntree棵树,那么对于特征X的重要性=∑(errOOB2-errOOB1)/Ntree,之所以可以⽤这个表达式来作为相应特征的重要性的度量值是因为:若给某个特征随机加⼊噪声之后,袋外的准确率⼤幅度降低,则说明这个特征对于样本的分类结果影响很⼤,也就是说它的重要程度⽐较⾼。
所以可以认为这个特征重要性的衡量是考虑了特征之间的相互作⽤;跟tf-idf或者t-test,chi-square-test这些单变量分析的⽅法有很⼤不同;但这个优化是在权重值的计算层⾯的,并没有对特征进⾏什么改造;
但是⼜不像LDA、word2vec那样,考虑了上下⽂的语义关系以及情感分析(即没有考虑近义词和由于和其他重要词组合⽽出现的情感的褒贬),RF的特征选择是⽆序的bagging考虑的⽅法(不考虑词出现的先后顺序和语义层⾯的关系);
RF的特征筛选并没有对特征进⾏组合加⼯或者其他变换(这点不如逻辑回归),同时没有加⼊近义词的考虑;因此在特征⼯程上⾯,这⾥还有很多优化的空间。详细参见后续的⽂章。
4、与其他集成分类器的区别和共同点(bagging,Adaboosting,GBDT)?
随机森林与以决策树作为基本分类器的bagging算法相⽐,其相同点是两者都使⽤bootstrap的⽅法对样本进⾏有放回的抽样;
但不同之处在于随机森林除了对样本进⾏随机抽样,还对特征进⾏随机抽样;⽽bagging算法的特点是它⾥⾯可以⽤不同的⽅法来构建分类器,不仅仅局限于决策树;
5、随机森林是如何衡量每棵树在最终决策时的权重的?
权重树随机森林算法,采⽤决策树在其袋外数据上的AUC衡量决策树的分类能⼒,根据每棵树的分类能⼒对树分配其在最终决策时的权重,采⽤权重集成⽅法对决策树进⾏组合。
三、具体实现过程
具体实现过程如下:
(1)原始训练集为N,应⽤bootstrap法有放回地随机抽取k个新的⾃助样本集,并由此构建k棵分类树,每次未被抽到的样本组成了k个袋外数据;
(2)设有mall个变量,则在每⼀棵树的每个节点处随机抽取mtry个变量(mtry<< mall),然后在mtry中选择(⽤节点划分的⽅法)⼀个最具有分类能⼒的变量,变量分类的阈值通过检查每⼀个分类点确定;
(3)每棵树最⼤限度地⽣长, 不做任何修剪;
(4)将⽣成的多棵分类树组成随机森林,⽤随机森林分类器对新的数据进⾏判别与分类,分类结果按树分类器的投票多少⽽定。
四、GBDT
1、回归树、提升树和梯度提升树
(1)回归树
gbdt中的树是回归树,不是决策树,⽤来做回归预测,调整后也可以⽤于分类;
回归树分⽀时穷举每⼀个feature的每⼀个阈值寻最好的分割点,衡量好坏的标准不是最⼤熵,⽽是最⼩化平⽅误差;
(2)提升树
迭代多棵回归树来共同决策;
2、boosting和bagging算法的区别
随机森林将多棵决策树的结果进⾏加权后得到最终的结果,对不同的样本的重要性并没有区分,对不同的树的训练结果也没有做进⼀步的优化提升,是⼀种bagging的思想。
GBDT则是基于boosting的思想。
boosting算法是在迭代的每⼀步构建弱学习器来弥补原有模型的不⾜。
其中,adaboost通过给被已有模型预测错误的样本更⾼的权重,使得先前被学习错误的样本可以在后
续的训练中得到更⾼的关注来弥补原有模型的不⾜;gradient boost则是通过每次迭代的时候构建⼀个沿梯度下降最快的⽅向的学习器来弥补模型的不⾜。
经典的AdaBoost算法只能处理采⽤指数损失函数的⼆分类学习任务,⽽梯度提升⽅法通过设置不同的可微损失函数可以处理各类学习任务(多分类、回归、Ranking等),应⽤范围⼤⼤扩展。
另⼀⽅⾯,AdaBoost算法对异常点(outlier)⽐较敏感,⽽梯度提升算法通过引⼊bagging思想、加⼊正则项等⽅法能够有效地抵御训练数据中的噪⾳,具有更好的健壮性。
3、GBDT构造新特征(组合特征)的思想
4、GBDT是如何衡量特征的重要性的
计算所有的⾮叶⼦节点在分裂时加权不纯度的减少,减少得越多说明特征越重要。
不纯度的减少实际上就是该节点此次分裂的收益,因此我们也可以这样理解,节点分裂时收益越⼤,该节点对应的特征的重要度越⾼。
5、GBDT的学习算法:
1. 算法每次迭代⽣成⼀颗新的决策树
2. 在每次迭代开始之前,计算损失函数在每个训练样本点的⼀阶导数gi和⼆阶导数hi
3. 通过贪⼼策略⽣成新的决策树,通过等式(7)计算每个叶节点对应的预测值
4. 把新⽣成的决策树ft(x)添加到模型中:y ti=y t−1i+ft(xi)
通常在第四步,我们把模型更新公式替换为:y ti=y t−1i+ϵft(xi),其中ϵ称之为步长或者学习率。增加ϵ因⼦的⽬的是为了避免模型过拟合。
五、随机森林和GBDT的⽐较
1、随机森林和GBDT分别在什么情况下容易过拟合?
从⽣成树的⽅式的⾓度看,随机森林是通过随机抽取样本和特征来建⽴决策树的,因此当数据中有较多缺失值的时候,随机森林的结果容易发⽣过拟合;⽽GBDT基于错误样本来建⽴提升树,当样本中有异常值outlier的时候,GBDT容易发⽣过拟合;
2、在分布式实现上,随机森林和GBDT哪个的实现更困难?
随机森林的分布式实现更简单,因为在随机森林中每棵树建⽴的时候与其他的树是独⽴的,⽽GBDT每棵树的建⽴需要依赖于上⼀层的结果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。