Ответ 1
Последние версии Scipy включают решатель:
У меня есть классическая линейная проблема регрессии формы:
y = X b
где y
- вектор отклика X
- это матрица входных переменных, а b
- это вектор подходящих параметров, которые я ищу.
Python предоставляет b = numpy.linalg.lstsq( X , y )
для решения задач этой формы.
Однако, когда я использую это, я имею тенденцию получать либо чрезвычайно большие, либо очень маленькие значения для компонентов b
.
Я хотел бы выполнить то же самое, но ограничить значения b
между 0 и 255.
Похоже, что scipy.optimize.fmin_slsqp()
- это вариант, но я нашел его чрезвычайно медленным для размера интересующей меня проблемы (X
- это что-то вроде 3375 by 1500
и, надеюсь, еще больше).
b
?Последние версии Scipy включают решатель:
Вы упомянули, что вы найдете регрессию Лассо или регрессию Ридж. Эти и многие другие ограниченные линейные модели доступны в пакете scikit-learn. Ознакомьтесь с разделом об обобщенных линейных моделях.
Обычно ограничение коэффициентов связано с каким-то параметром регуляризации (C или альфа) --- некоторые из моделей (те, которые заканчиваются на CV) могут использовать кросс-проверку для автоматического задания этих параметров. Вы также можете ограничить модели использованием только положительных коэффициентов - например, для модели Lasso существует опция.
scipy-optimize-leastsq-with-bound-constraints
на SO дает lesssq_bounds, который scipy lesssq
+ связанные ограничения, такие как 0 <= x_i <= 255.
(Scipy lesssq обертывает MINPACK, одну из нескольких реализаций широко используемых
алгоритм Левенберга-Маркварда
a.k.a. демпфированные наименьшие квадраты.
Существуют различные способы реализации границ; lesssq_bounds - это самый простой.)
Как говорит @conradlee, вы можете найти реализации регрессии Лассо и Риджа в пакете scikit-learn. Эти регрессоры служат вашей цели, если вы просто хотите, чтобы ваши параметры подгонки были маленькими или положительными.
Однако, если вы хотите наложить любой другой диапазон в качестве границы для параметров подгонки, вы можете создать свой собственный ограниченный регрессор с тем же пакетом. Посмотрите ответ дэвида Дейла на этот вопрос для примера.