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

Posted

tags:

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

参考技术A

随机森林是以决策树为基学习器的集成学习算法。随机森林非常简单,易于实现,计算开销也很小,更令人惊奇的是它在分类和回归上表现出了十分惊人的性能,因此,随机森林也被誉为“代表集成学习技术水平的方法”。
本文是对随机森林如何用在特征选择上做一个简单的介绍。

只要了解决策树的算法,那么随机森林是相当容易理解的。随机森林的算法可以用如下几个步骤概括:

没错,就是这个到处都是随机取值的算法,在分类和回归上有着极佳的效果,是不是觉得强的没法解释~
然而本文的重点不是这个,而是接下来的特征重要性评估。

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

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

输出为

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

输出为:

可见除去class label之外共有13个特征,数据集的大小为178。

按照常规做法,将数据集分为训练集和测试集。此处注意: sklearn.cross_validation 模块在0.18版本中被弃用,支持所有重构的类和函数都被移动到了model_selection模块。从sklearn.model_selection引入train_test_split

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

输出的结果为

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

输出为

这样,帮我们选好了3个重要性大于0.15的特征。

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

参考技术A

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

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

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

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

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

以上是关于利用随机森林对特征重要性进行评估的主要内容,如果未能解决你的问题,请参考以下文章

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

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

集成学习Bagging算法Bagging+Pasting随机森林极端随机树集成(Extra-trees)特征重要度包外评估

机器学习|R语言|利用随机森林对二手车交易价格进行评估(内含完整代码与数据)

ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序

随机森林原理与Sklearn参数详解