随机森林的特征选择


16

我有一个主要包含财务变量(120个特征,4k个示例)的数据集,这些变量大多具有高度相关性且非常嘈杂(例如技术指标),因此我想选择最多约20-30个模型,供以后用于模型训练(二进制分类) - 增加减少)。

我当时正在考虑使用随机森林进行特征排名。递归使用它们是一个好主意吗?例如,假设在第一轮中,我丢掉最差的20%,第二次也丢掉,依此类推,直到获得所需数量的功能。我应该对RF使用交叉验证吗?(对我来说,不使用CV是很直观的,因为那已经是RF所做的事情了。)

另外,如果我使用随机森林,是否应该将它们用作二进制的分类器或实际增加/减少的回归变量,以获得功能的重要性?

顺便说一下,在特征选择之后,我想尝试的模型是:SVM,神经网络,局部加权回归和随机森林。我主要在Python中工作。


2
希望联系以交流见解。我正在研究类似的东西
user670186

没有任何理由为什么没有人建议只使用built-in属性RandomForestClassifiersklearnfeature_importances_....?您会在链接中看到它。
Candic3 2013年

当心,因为multicollinearity会扭曲功能的重要性和功能选择。在 这里查看
Candic3'1

Answers:


12

对于特征选择,我们需要一个评分功能以及一种用于优化评分功能的搜索方法

如果您定义了一些相关的重要性得分,则可以将RF用作特征排名方法。RF将使用替换方法基于随机选择特征,并将每个子集分组到一个单独的子空间(称为随机子空间)中。一个重要的评分功能可以基于为该随机子空间中的每个特征分配每棵树的准确性。然后,对每个单独的树执行此操作。由于生成子空间的来源是随机的,因此您可以设置一个阈值来计算重要性分数。

摘要:

步骤1:如果功能X2出现在25%的树木中,则对其评分。否则,请勿考虑对功能进行排名,因为我们没有足够的性能信息

步骤2:现在,将X2出现在其中的每棵树的性能得分分配给X2并取平均得分。例如:perf(Tree1)= 0.85 perf(Tree2)= 0.70 perf(Tree3)= 0.30

然后,特征X2的重要性=(0.85 + 0.70 + 0.30)/ 3 = 0.6167

您可以通过在决策树中包括要素的分割深度或信息增益值来考虑更高级的设置。有很多方法可以基于决策树和RF设计评分功能。

关于搜索方法,您的递归方法似乎是一种合理的选择排名最高的方法。

最后,您可以在选择功能时将RF用作分类器或回归模型,因为这两个功能都会为您提供性能得分。该分数是指示性的,因为它是基于袋装OOB样本得出的,您可能不考虑在更简单的设置中进行交叉验证。


感谢您的输入。确实要指出这一点(0.85+0.70+0.30)/3 = 0.6167
亨迪

5
如果您使用的是python,则可以在调用随机森林时直接使用sklearn中计算的变量重要性。
从零开始2014年

5

我有一个主要包含财务变量(120个特征,4k个示例)的数据集,这些变量大多具有高度相关性且非常嘈杂(例如技术指标),因此我想选择最多约20-30个模型,供以后用于模型训练(二进制分类) - 增加减少)。

4k示例确实不足以估计任何非常复杂的东西-您需要使用最简单的模型(线性/逻辑回归,线性svm)和少量变量

鉴于您的数据嘈杂且相互关联,PCA可能是您最好的选择[它有效地识别了各个指标的平均平均信号]

L2正则化(对于线性模型)还将有助于平均噪声(例如,如果您有n个相同信号的嘈杂副本,则l2正则化将鼓励权重相同-将这n个变量平均)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.