将“成本项”添加到线性回归中,从而最小化解决方案值

计算科学 Python 优化
2021-12-04 10:02:52

我正在使用 Python 的optimize.lsq_linear 方法运行线性回归,其界限设置在 0% 到 100% 的功耗之间。

x = optimize.lsq_linear(A, b, bounds=[0,100], method='trf')

A 矩阵是稀疏的,在许多情况下,某些 X 值对结果的影响非常非常小。有时回归将这些“遥远”的 X 值设置为 0,有时它们设置得非常高(接近 100%,大概是因为它们帮助了一些很小的量),但通常它们被设置为正好 10。我不知道为什么是 10 .

在大学的线性代数课上(大约 30 年前!)我隐约记得有人告诉我在回归中添加“成本函数”以告诉回归在“没有多大帮助”的情况下最小化 X 的值。较低的 X 是更少的功耗,这是一件好事。我认为这有时是作为求解器中的一个参数完成的,但也可以通过向矩阵 A 和向量 b 添加一行来分配“使用更多 x 的成本”来完成。

我能记住的唯一可以描述这一点的词是“成本”和“重量”。然而,我所有关于成本的搜索都会产生一些关于解决方案成本函数的信息,例如由 optimize.lsq_linear 返回的浮点数。我所有关于权重的搜索都产生了对不同数据集(A 矩阵中的行)进行不同加权的结果,因为某些行可能比其他行更可靠。这些都不是我所追求的。

  • 我所追求的技术的名称是什么?
  • 有人可以就如何为我的 x 值添加一些“成本”提供参考或简要回顾(因此当增加它们的影响可以忽略不计时,x 值被最小化)?
  • 为什么 optimize.lsq_linear 将“遥远”的 x 值设置为 10?

更新:下面的评论和参考指向 Ridge 回归、Lasso 回归和 Elastic-Net 回归。所有都是线性回归方法,在 X 系数的大小上添加了惩罚:Ridge 最小化 X 的平方和,Lasso 最小化 X 的值,Elastic-Net 是 Ridge 和 Lasso 的组合。阅读参考资料后,看起来 Lasso 在这里可能是最有趣的,因为它处理稀疏矩阵并且更喜欢将更多系数设置为零的解决方案。

我也想知道对系数的惩罚权重。我的一些 X 值比其他值使用更多的功率,所以在回归中包含这些信息会很好,所以如果使用有效 X 和低效 X 的好处是相同的,那么回归可以优先考虑有效 X。我隐约记得通过在 A 和 b 中添加一行来执行此操作的方法,因此没有惩罚的 Ax=b 可能是:

| A11 A12 | * | x1 | = | b1 b2 |
| A21 A22 |   | x2 |   

为每个 x 添加甚至惩罚会添加如下内容:

| A11 A12 | * | x1 | = | b1 b2 0 |
| A21 A22 |   | x2 | 
|  1   1  |

改变惩罚系数可以增加更多细节,例如如果 x1 的效率比 x2 低 10 倍:

| A11 A12 | * | x1 | = | b1 b2 0 |
| A21 A22 |   | x2 | 
|  10  1  |

更多问题:

  • 我添加行的方法是否正确?
  • 这种方法有名字吗?
  • 可以将这种加权惩罚方法合并到像 Lasso 这样更标准的方法中吗?
  • Lasso 如何使用边界?我所有的 X 系数都需要在 0 到 100 之间。
0个回答
没有发现任何回复~