Я использую стандартную линейную регрессию, используя scikit-learn в python. Тем не менее, я хотел бы, чтобы веса были положительными для каждой функции (не отрицательной), есть ли способ, которым я могу это сделать? Я искал в документации, но не мог найти способ сделать это. Я понимаю, что я не могу найти лучшее решение, но мне нужно, чтобы веса были неотрицательными.
источник
Я использую обходной путь с Лассо в Scikit Learn (это определенно не лучший способ сделать что-то, но он работает хорошо). У Лассо есть параметр,
positive
который можно установитьTrue
и заставить коэффициенты быть положительными. Кроме того, установка коэффициента регуляризацииalpha
на значение, близкое к 0, приводит к линейной регрессии, имитирующей лассо, без регуляризации. Вот код:источник
Вот пример того, почему вы хотите это сделать (и примерно как).
У меня есть 3 прогностические модели цен на жилье: линейная, градиентная, нейронная сеть.
Я хочу смешать их в средневзвешенном и найти лучшие веса.
Я запускаю линейную регрессию и получаю решение с такими весами, как -3.1, 2.5, 1.5 и некоторый перехват.
Так что вместо этого я использую sklearn
И я получаю положительные веса, которые суммируют (очень близко) к 1. В моем примере я хочу, чтобы альфа работала лучше всего вне выборки, поэтому я использую LassoCV с перекрестной проверкой.
Документы sklearn утверждают, что вы не должны устанавливать альфа в 0 по численным причинам, однако вы также можете использовать прямую Lasso () и установить альфа-параметр настолько низким, насколько это возможно для получения разумного ответа.
источник