如何在弹性网络回归模型中添加关于预测变量的先验知识?

时间:2015-07-22 23:06:39

标签: machine-learning scikit-learn regression glmnet

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

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

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

我在Python中使用Scikit-learn,但我更关心的是算法,而不仅仅是如何做到这一点。

2 个答案:

答案 0 :(得分:1)

如果您在R中使用glmnet包,则penalty.factor参数会解决此问题。

来自?glmnet

  

penalty.factor

     

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

答案 1 :(得分:0)

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