Есть ли различия в `cvxpy` библиотеке между нормой L2 и` sum_of_square () `? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь использовать cvxpy lib для решения очень простой задачи наименьших квадратов.Но я обнаружил, что cvxpy дал мне очень разные результаты, когда я использовал sum_squares и norm (x, 2) в качестве функций потерь.То же самое происходит, когда я пробую норму 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 - это * m «матрица переходов» вероятностей того, как s рандомизирована в y.

Ниже приведены гистограммы переменной s:

Использование sum_of_square

Использование norm2

1 Ответ

0 голосов
/ 11 августа 2019

Давайте рассмотрим обе проблемы, используя лагранжиан задачи:

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

enter image description here

Очевидно, что для одного и того же значения $ \ lambda $ в (1) и (2) результат будет отличаться от значения члена точности ($ A x -b $) будет другим.

В коде или в решателе нет ничего плохого, это просто другая модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...