特征筛选(随机森林)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征筛选(随机森林)相关的知识,希望对你有一定的参考价值。

参考技术A

随机森林能够度量每个特征的重要性,我们可以依据这个重要性指标进而选择最重要的特征。sklearn中已经实现了用随机森林评估特征重要性,在训练好随机森林模型后,直接调用feature_importan ces 属性就能得到每个特征的重要性。

一般情况下,数据集的特征成百上千,因此有必要从中选取对结果影响较大的特征来进行进一步建模,相关的方法有:主成分分析、lasso等,这里我们介绍的是通过随机森林来进行筛选。

用随机森林进行特征重要性评估的思想比较简单,主要是看每个特征在随机森林中的每棵树上做了多大的贡献,然后取平均值,最后比较不同特征之间的贡献大小。

贡献度的衡量指标包括:基尼指数(gini)、袋外数据(OOB)错误率作为评价指标来衡量。

衍生知识点:权重随机森林的应用(用于增加小样本的识别概率,从而提高总体的分类准确率)

随机森林/CART树在使用时一般通过gini值作为切分节点的标准,而在加权随机森林(WRF)中,权重的本质是赋给小类较大的权重,给大类较小的权重。也就是给小类更大的惩罚。权重的作用有2个,第1点是用于切分点选择中加权计算gini值,表达式如下:

其中,N表示未分离的节点,N L 和N R 分别表示分离后的左侧节点和右侧节点,W i 为c类样本的类权重,n i 表示节点内各类样本的数量,Δi是不纯度减少量,该值越大表明分离点的分离效果越好。

第2点是在终节点,类权重用来决定其类标签,表达式如下:

参考文献:随机森林针对小样本数据类权重设置 https://wenku.baidu.com/view/07ba98cca0c7aa00b52acfc789eb172ded639998.html

这里介绍通过gini值来进行评价,我们将变量的重要性评分用VIM来表示,gini值用GI表示,假设有m个特征X 1 ,X 2 ,...X c ,现在要计算出每个特征X j 的gini指数评分VIM j ,即第j个特征在随机森林所有决策树中节点分裂不纯度的平均改变量,gini指数的计算公式如下表示:

其中,k表示有k个类别,p mk 表示节点m(将特征m逐个对节点计算gini值变化量)中类别k所占的比例。

特征X j 在节点m的重要性,即节点m分枝前后的gini指数变化量为:

其中GI l 和GI r 分别表示分枝后两个新节点的gini指数。

如果特征X j 在决策树i中出现的节点在集合M中,那么X j 在第i棵树的重要性为:

假设随机森林共有n棵树,那么:

最后把所有求得的重要性评分进行归一化处理就得到重要性的评分:

通过sklearn中的随机森林返回特征的重要性:

值得庆幸的是,sklearnsklearn已经帮我们封装好了一切,我们只需要调用其中的函数即可。
我们以UCI上葡萄酒的例子为例,首先导入数据集。

然后,我们来大致看下这时一个怎么样的数据集

输出为

可见共有3个类别。然后再来看下数据的信息:

输出为

可见除去class label之外共有13个特征,数据集的大小为178。
按照常规做法,将数据集分为训练集和测试集。

好了,这样一来随机森林就训练好了,其中已经把特征的重要性评估也做好了,我们拿出来看下。

输出的结果为

对的就是这么方便。
如果要筛选出重要性比较高的变量的话,这么做就可以

输出为

瞧,这不,帮我们选好了3个重要性大于0.15的特征了吗~

[1] Raschka S. Python Machine Learning[M]. Packt Publishing, 2015.
[2] 杨凯, 侯艳, 李康. 随机森林变量重要性评分及其研究进展[J]. 2015.

随机森林如何评估特征重要性

参考技术A

集成学习模型的一大特点是可以输出特征重要性,特征重要性能够在一定程度上辅助我们对特征进行筛选,从而使得模型的鲁棒性更好。

随机森林中进行特征重要性的评估思想为:
判断每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小。其中关于贡献的计算方式可以是基尼指数或袋外数据错误率。

基尼指数计算方法:k 代表 k 个类别, 代表类别 k的样本权重。

对于一棵树 ,用OOB样本可以得到误差 e1,然后随机改变OOB中的第 j 列,保持其他列不变,对第 j 列进行随机的上下置换,得到误差 e2。至此,可以用 e1-e2 来刻画特征 j 的重要性。其依据就是,如果一个特征很重要,那么其变动后会非常影响测试误差,如果测试误差没有怎么改变,则说明特征j不重要。

而该方法中涉及到的对数据进行打乱的方法通常有两种:
1)是使用uniform或者gaussian抽取随机值替换原特征;
2)是通过permutation的方式将原来的所有N个样本的第 i 个特征值重新打乱分布(相当于重新洗牌)。

以上是关于特征筛选(随机森林)的主要内容,如果未能解决你的问题,请参考以下文章

随机森林进行特征重要性度量的详细说明

随机森林的REF递归特征消除法来筛选特征(python实现不依赖sklearn)

随机森林如何评估特征重要性

机器学习第20篇 - 基于Boruta选择的特征变量构建随机森林

随机森林变量重要性排序时的影响为负值怎么办

利用随机森林对特征重要性进行评估