如何使用 Lasso 和弹性网络作为特征选择器?

机器算法验证 分类 特征选择 Python 套索
2022-04-06 13:30:22

我有一个包含 900,000 行和 8 个特征的数据集。我想查看每个功能的重要性,以便评估我添加的功能是否可行。

我在做一些研究后使用的一种方法是套索方法,据我了解,它通过尝试最小化这个函数来为每个变量提供系数。

套索功能

将我的 alpha 更改为 .001 后,我能够为每个功能获得这些系数,但我不确定如何处理它们以及它们的含义。是越高越重要,还是我应该将这些系数应用于我的数据?

Feature 1 : 11.3697897122
Feature 2 : 0.210785096352
Feature 3 : 4.94093396164e-05
Feature 4 : 0.0
Feature 5 : 0.0
Feature 6 : 0.0
Feature 7 : -0.0370673794819
Feature 8 : -0.15121827904
2个回答

Lasso 基本上是在线性模型中选择变量,Y=Xβ+e使用调整参数 (α在你的情况下)。它利用惩罚项将一些系数惩罚为零。请注意,套索的主要优势在于高维数据(当变量多于观察值时)。该过程很简单,如果系数接近零,则将其推至零。

在您的情况下,您的观察结果比变量多。您需要对数据进行规范化,然后运行 ​​Lasso 算法。最好使用 BIC AIC CV 等标准选择调整参数。如果您使用 R,则 MSGPS 包会为您完成所有步骤。

最后,如果某些系数为零,则意味着可以忽略它们的影响,然后可以将其从模型中删除。此外,(排序的)非零系数可以按其重要性排序。

注意:如果变量之间存在共线性,那么 lasso 只会选择一个变量并将其他变量推向零。然后,如果您认为变量之间存在共线性,则需要注意。如果您怀疑数据中存在某种共线性,那么最简单的检查方法是找到协方差矩阵(在 R cov(x) 中),然后找到该协方差矩阵的特征值(在 R eigen(cov(X) 中) $值)。如果特征值为零(或接近零),则表示数据存在共线性。

显示的系数是对w在你的等式中。什么时候|w|很大,估计相应特征的 1 个单位的变化对y, 其他都一样。也就是说,线性模型的通常解释适用。

系数为的特征0被认为没有影响y鉴于样本量和选择α,即它们已从模型中删除。