特征选择过滤方法

数据挖掘 机器学习 特征选择 数据科学模型
2022-02-25 18:54:33

我对何时使用哪种过滤方法进行特征选择感到困惑。我尝试通过在线资源学习它们,并找到了卡方、方差阈值、F 检验、互信息等方法。当我阅读这些方法时,我对应该使用哪一种感到困惑。我如何知道该方法是否真的选择了最相关的特征并且没有丢弃任何实际上导致输出原因的特征?

2个回答

通常,您需要将特征选择过滤器方法包装在交叉验证方案中。下面是这种算法的一个示例,假设您也在调整超参数。

  1. 将数据拆分为训练和测试。
  2. 仅将训练集拆分为 k 折。

  3. 对于超参数调整的每次迭代,使用交叉验证,

对于k 折中的每一个,对于 i = 1 到 k 的迭代,请执行以下操作:

1) 让验证集为第 i 个折叠,“内部训练”集为所有不等于第 i 个折叠的折叠。

2)使用您的过滤方法,使用内部训练集上的某个截止值 p 选择您的某些特征子集。例如,我可能会过滤掉与目标变量 y 的绝对相关性小于 p = 0.3 的变量。

3) 拟合模型。

4) 预测验证集 = fold i。对模型进行评分,即评估您尝试优化的函数,例如对数损失、均方/绝对误差、Brier 等。保存分数。

结尾

完成一组超参数的交叉验证后,对所有 k 折取平均分。如果分数优于在先前迭代中找到的先前一组超参数,则保存这些超参数。

注意:您可以选择让 p,您的过滤器截止值,也可以在此处作为超参数。为简单起见,我将其保持不变,但总的来说,如果您也调整过滤截止值,您可能会做得更好。

结尾

  1. 使用相同的(或最好的,如果您让它成为超参数并在步骤 3 中对其进行优化)过滤截止 p,以及您在步骤 3 的交叉验证过程中找到的最佳超参数,使用在步骤 1 中创建的训练集,并适合您的“最终”模型。也就是说,使用与步骤 3 中完全相同的过滤方法,使用截止值 p 过滤您的训练集。然后,使用最佳超参数(也在步骤 3 中找到)将模型拟合到该数据集。

  2. 在步骤 4 中使用您的拟合模型预测测试集。为模型评分。

最后,再次重复整个过程,但这一次,不要做任何过滤器选择方法(省略过滤过程)。在交叉验证和步骤 1 的初始拆分中使用完全相同的种子,以确保您拆分数据的方式与使用过滤时相同。现在,比较测试集的分数,看看使用你的过滤方法是否有任何好处。

一般来说,我不喜欢基于过滤器的方法,因为它们都引入了一些任意的 cutoff = p 并且都是单变量的(它们不考虑模型中的其他变量,只是孤立地考虑)。话虽如此,它们速度很快,它们可能会解决您的问题。

编辑:此外,根据您拥有的数据量和验证分数的可变性,可能需要多次重复上述整个算法(步骤 1 到 5),以获得使用过滤和不使用过滤之间的有效比较。你会重复上面的算法,说 N 次,一次有过滤,一次没有,总共 2N 次。然后,您将计算平均值的平均值(使用过滤找到 N 次重复的平均分数,并在没有过滤的情况下找到相同 N 次重复的平均分数)。然后,您可以比较分数、形成置信区间等,以获得更可靠(但也更耗时)的比较。

希望这可以帮助。

如果您有标记数据,请检查递归特征消除 ( RFE )。

确切地指出您的问题:我如何知道该方法是否真的选择了最相关的特征并且没有丢弃任何实际上导致输出原因的特征?

https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html

来自文档

给定一个为特征分配权重的外部估计器(例如,线性模型的系数),递归特征消除(RFE)的目标是通过递归地考虑越来越小的特征集来选择特征。首先,估计器在初始特征集上进行训练,每个特征的重要性通过 coef_ 属性或 feature_importances_ 属性获得。然后,从当前的特征集中剪除最不重要的特征。该过程在修剪后的集合上递归重复,直到最终达到要选择的所需特征数量。

希望能帮助到你!