【问题标题】:How to add prior knowledge about predictors in an Elastic net Regression model?如何在弹性网络回归模型中添加有关预测变量的先验知识?
【发布时间】:2015-07-22 23:06:39
【问题描述】:

我有一个最适合使用弹性网络解决的回归模型。 它有大量的预测变量,我只需要选择其中的一个子集。此外,预测变量之间可能存在相关性,因此选择 Elastic net)

我的问题是: 如果我知道预测变量的特定子集必须存在于输出中(它们不应该受到惩罚),那么如何将这些信息添加到弹性网络中? 如果弹性网络适合这种情况,甚至可以使用回归模型。

如果可能,我需要有关提出此类解决方案的论文的建议。

我在 Python 中使用 Scikit-learn,但我更关心算法而不是如何去做。

【问题讨论】:

  • 你用的是什么软件?
  • 我在 python 中使用 Scikit-learn。但是我更关心知道方法本身,他们我会寻找一个实现。

标签: machine-learning scikit-learn regression glmnet


【解决方案1】:

如果您在 R 中使用 glmnet 包,penalty.factor 参数解决了这个问题。

来自?glmnet

penalty.factor

可以对每个系数应用单独的惩罚因子。这是一个乘以 lambda 以允许差异收缩的数字。对于某些变量可以为 0,这意味着没有收缩,并且该变量始终包含在模型中。所有变量的默认值为 1(对于 exclude 中列出的变量,默认为无穷大)。注意:惩罚因子在内部重新调整为总和为 nvar,并且 lambda 序列将反映这种变化。

【讨论】:

  • 我没有使用 R,但知道这一点很有用。那么这个因子乘以 L1 和 L2 的惩罚?你知道不同因素的算法叫什么吗?
【解决方案2】:

这取决于你所拥有的知识。正则化是一种为模型添加先验知识的方法。例如,岭回归对系数应该很小的知识进行编码。套索回归编码了并非所有预测变量都很重要的知识。弹性网络是一个更复杂的先验,它结合了模型中的两个假设。您可以检查其他正则化器,例如,如果您知道您的预测器被分组在某些组中,您可以检查分组套索。此外,如果它们以某种方式交互(可能某些预测变量相互关联)。如果您需要更好地控制之前的情况,您也可以检查贝叶斯回归。

【讨论】:

  • 我的先验知识是输出中应该存在“预测变量的子集”,但它们的系数是未知数。其余的预测变量可能会也可能不会被选为预测变量。
猜你喜欢
  • 2021-02-07
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多