l2规范和sum_of_square之间的cvxpy库有什么区别?

时间:2018-12-27 18:06:27

标签: convex-optimization cvxpy norm

我正在尝试使用cvxpy lib解决一个非常简单的最小二乘问题。但是我发现,当我使用sum_squares和norm(x,2)作为损失函数时,cvxpy给了我非常不同的结果。 当我尝试l1范数和绝对值之和时,也会发生同样的情况。

这些差异是数学上的优化问题定义还是库的实现?

这是我的代码示例:

s = cvx.Variable(n)

constrains = [cvx.sum(s)==1 , s>=0, s<=1] 

prob = cvx.Problem(cvx.Minimize(cvx.sum_squares(A * s - y)), constrains)

prob = cvx.Problem(cvx.Minimize(cvx.norm(A*s - y ,2)), constrains)

y和s都是表示直方图的向量。 y是随机数据的直方图,s是我要恢复的原始直方图。 A是一个概率的n * m“过渡”矩阵,其中s如何随机分配到y。

以下是变量s的直方图:

Using sum_of_square

Using norm2

1 个答案:

答案 0 :(得分:0)

让我们使用问题的拉格朗日法来研究两个问题:

$$ \开始{align *} {\左\ | A x-b \ right \ |} {2} + \ lambda R \ left(x \ right)\ tag {1} \ {\左\ | A x-b \ right \ |} {2} ^ {2} + \ lambda R \ left(x \ right)\ tag {2} \ end {align *} $$

enter image description here

显然,对于(1)和(2)中相同的$ \ lambda $值,结果将有所不同,因为保真度项($ A x-b $)的值将不同。

代码或求解器没有什么问题,只是一个不同的模型。