递归特征消除 (SVM) 的超参数选择

机器算法验证 机器学习 支持向量机 预测模型 特征选择 scikit-学习
2022-03-29 10:23:52

假设我对应用递归特征消除感兴趣(例如RFE()在 中sklearn),并且我的数据集大小适中,具有n>p, 在哪里p是特征的数量。假设我有理由相信数据相对嘈杂,并且我相信特征选择可以提高分类准确性。

如果我想使用支持向量分类器(例如SVC()使用线性内核)来实现 RFE,则必须训练模型,然后将其传递给RFE(),然后它可以找到要在最终模型中使用的特征子集。然后,我们是否使用特征子集在数据集上重新训练SVC?所以我的问题:

这是正确的解释吗?如果是这样,那么我们如何解决模型中超参数的调整问题?(线性)SVC 的使用参数C控制可以极大地影响偏差/方差权衡的正则化量。因此,我们是否优化C首先,然后将模型传递给RFE(),得出最佳子集特征选择,然后在子集特征上拟合相同的模型?还是我们选择一个任意的C(比如 1),传递给RFE(),然后在剩余特征上训练和调整最终模型?当然,在这种情况下,所有调优都是通过交叉验证完成的。

前一个选项对我来说似乎更正确,但我也认为我们错过了一些可能的准确性改进,因为我们没有在特征子集上再次调整模型。(也许是两个调音?在 RFE 之前和 RFE 之后?)

我们可以将此过程推广到其他分类器吗?如果一个怎么办l1可以罚款吗?

1个回答

我将为后代回答我自己的问题。

在 Kjell Johnson 和 Max Kuhn 的优秀著作Applied Predictive Modeling中,RFE 算法的表述非常清楚。Guyon 等人的原始论文中并没有这么清楚地说明(在我看来)。这里是:

在此处输入图像描述

显然,正确的程序是在原始数据集上完全调整和训练模型,然后(使用模型)计算变量的重要性。消除k其中,然后在特征子集上重新训练和调整模型并重复该过程。

我是一个 python 用户,所以我会说:如果你使用sklearn'sRFERFECV函数,这种形式的算法是没有完成的。相反,您传递一个模型(可能已经调整过),然后使用该模型执行整个 RFE 算法虽然我不能提供正式的证据,但我怀疑如果您使用相同的模型进行 RFE 选择,您可能会过度拟合您的数据,因此在使用sklearn'RFERFECV开箱即用的函数时可能应该小心。虽然,由于RFECV确实执行交叉验证,它可能是更好的选择。

至于是否RFE应该做一个l1模型中的惩罚——我不知道。我的轶事证据是,在尝试这个时,我的模型(线性支持向量分类器)没有很好地泛化。但是,这是针对存在一些问题的特定数据集。用一大勺盐来接受这个声明。

如果我了解更多信息,我会更新这篇文章。