Существует ли какой-либо программный пакет для решения линейной регрессии с целью минимизации нормы L-бесконечности.
Существует ли какой-либо программный пакет для решения линейной регрессии с целью минимизации нормы L-бесконечности.
Ответы:
Краткий ответ : Ваша проблема может быть сформулирована как линейная программа (LP), позволяя вам выбрать свой любимый решатель LP для этой задачи. Чтобы узнать, как записать проблему в виде LP, читайте дальше.
Эту проблему минимизации часто называют чебышевским приближением .
Пусть , со строкой обозначенной и . Затем мы стремимся минимизировать функцию относительно . Обозначим оптимальное значение через
Ключ к преобразованию этого в LP - переписать проблему в форме эпиграфа . Нетрудно убедить себя, что на самом деле
Теперь, используя определение функции , мы можем переписать правую часть выше как и мы видим, что минимизация нормы в настройке регрессии эквивалентна LP где выполняется оптимизация через , а обозначает вектор единиц длины . Я оставляю читателю в качестве (простого) упражнения переписать вышеуказанный LP в стандартной форме.f ⋆ = inf { t : - t ≤ y i - x i β ≤ t ,ℓ ∞ свести к минимуму т подлежащего у - Х & beta ; & le ; т 1 н
Связь с версией линейной регрессии (полная вариация)
Интересно отметить, что нечто очень похожее можно сделать с нормы . Пусть . Затем аналогичные аргументы приводят к выводу, что так что соответствующий LP является г ( & beta ; ) = | | у - Х & beta ; | | 1 г ⋆ = инф { т Т 1 п : - т я ≤ у я - х я & beta ; ≤ т я ,Свести к минимуму т Т 1 л при условии у - Х & beta ; & le ; т
Обратите внимание, что теперь является вектором длины вместо скаляра, как это было в случае . п л ∞
Сходство в этих двух проблемах и тот факт, что они оба могут быть разыграны как LP, конечно, не случайны. Две нормы связаны в том, что они являются двойственными нормами друг друга.
Малаб может сделать это, используя cvx. получить cvx (бесплатно):
В cvx вы бы написали это так:
cvx_begin
variable x(n);
minimize( norm(A*x-b,Inf) );
cvx_end
(см. пример на странице 12 руководства )
Существует реализация Python для CVX ( здесь ), но команды немного отличаются ...
Ответ @ cardinal хорошо сформулирован и принят, но ради полного закрытия этой темы я предлагаю следующее: Числовые библиотеки IMSL содержат процедуру для выполнения регрессии нормы L-бесконечности. Процедура доступна на Фортране, C, Java, C # и Python. Я использовал версии C и Python, для которых этот метод называется lnorm_regression, который также поддерживает общую регрессию -norm, . p > = 1
Обратите внимание, что это коммерческие библиотеки, но версии Python бесплатны (как в пиве) для некоммерческого использования.