使用随机森林进行特征选择

机器算法验证 特征选择 随机森林 Python
2022-02-16 22:26:24

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

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

另外,如果我使用随机森林,我应该将它们用作二元分类器还是回归器来实际增加/减少以获得特征重要性?

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

2个回答

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

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

概括:

Step1:如果特征 X2 出现在 25% 的树中,则对其进行评分。否则,不要考虑对特征进行排名,因为我们没有足够的关于其性能的信息

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

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

您可以通过在决策树中包含特征的分割深度或信息增益值来考虑更高级的设置。可以有多种方法来设计基于决策树和 RF 的评分函数。

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

最后,您可以使用 RF 作为分类器或回归模型来选择您的特征,因为它们都会为您提供性能分数。该分数是指示性的,因为它基于袋外 OOB 样本,您可能不会在更简单的设置中考虑交叉验证。

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

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

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

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