我有一个回归模型,最适合解决使用弹性网络。它有非常多的预测因子我只需要选择其中的一个子集。此外,预测因子之间可能存在相关性,因此选择Elastic net)
我的问题是:如果我知道预测器的特定子集必须存在于输出中(它们不应该被惩罚),那么如何将这些信息添加到弹性网络中呢?如果在这种情况下弹性网是合适的,甚至是回归模型。
如果可能的话,我需要关于提出这种解决方案的论文的建议。
我在Python中使用Scikit-learn,但我更关心的是算法而不仅仅是如何做。
如果您在R中使用glmnet
包,则penalty.factor
参数解决此问题。
From ?glmnet
:
penalty.factor
可以对每个系数应用单独的惩罚因子。这是一个乘以lambda的数字,以允许不同的收缩。对于某些变量可以为0,这意味着没有收缩,并且该变量始终包含在模型中。对于所有变量,默认值为1(对于exclude中列出的变量,默认值为无穷大)。注意:惩罚因子在内部被重新缩放为和为nvars, lambda序列将反映此更改。
这取决于你所拥有的知识类型。正则化是一种将先验知识添加到模型中的方法。例如,Ridge回归编码了系数应该很小的知识。套索回归使人们认识到并非所有的预测因素都是重要的。弹性网是一个更复杂的先验,它结合了模型中的两种假设。还有其他的正则化器,你可以检查,例如,如果你知道你的预测器被分组在某些组中,你可以检查分组套索。此外,如果它们以某种方式相互作用(也许一些预测因子相互关联)。如果你需要对先验进行更多的控制,你也可以检查贝叶斯回归。