如何强制线性回归模型中的指定系数为正?

数据挖掘 Python scikit-学习 scipy
2022-03-05 20:07:22

寻找一种在 Python 中执行此操作的方法。scipy.optimize.nnls强制所有系数为正。

一些额外的背景:我有一个带有一些解释变量和一个响应变量的数据框。当我运行常规线性回归时,一些解释变量的系数变为负数。这对于某些变量是可以的,但并非对所有变量都适用。我想防止特定变量的系数变为负数。

我想强制这些系数为正,因为它们应该对响应有积极的贡献。我希望具有正系数的变量是几个不同渠道的投资美元。回应是收入。我不希望我的模型说在某个渠道投入更多资金会降低收入(即使这样会创建一个更准确的模型)。

1个回答

抱歉,但从表面上看,这对我来说听起来很糟糕:如果线性回归为您认为应该为正的一些解释变量提供了负系数,那么这意味着您的数据“错误”(通常是嘈杂的或太小)或者你的直觉被误导了。

如果目标是以特定方式手动强制模型,我看不出为什么要使用数据驱动方法的任何充分理由。这相当于打碎温度计来掩盖发烧。

我建议改为:

  1. 一般来说,一个意想不到的结果可以说是一件好事,因为它告诉我们一些我们不知道的数据。这是调查数据中发生的情况的线索。线性回归分析起来很简单:可以查看相关性,绘制变量之间的关系等。
  2. 如果某些变量确实存在可疑情况,可能是数据中的某些错误使它们以不应该的方式表现,那么最好将它们从模型中完全丢弃而不是固定它们的系数,因为这样模型根本不会依赖它们。