Estou usando uma regressão linear padrão usando o scikit-learn em python. No entanto, gostaria de forçar os pesos a serem positivos para todos os recursos (não negativos). Existe alguma maneira de conseguir isso? Eu estava procurando na documentação, mas não consegui encontrar uma maneira de fazer isso. Entendo que talvez não obtenha a melhor solução, mas preciso que os pesos sejam não negativos.
fonte
Uso uma solução alternativa com Lasso no Scikit Learn (definitivamente não é a melhor maneira de fazer as coisas, mas funciona bem). Lasso tem um parâmetro
positive
que pode ser definidoTrue
e forçar os coeficientes a serem positivos. Além disso, definir o coeficiente de Regularizaçãoalpha
para ficar próximo de 0 faz com que o Lasso imite a Regressão Linear sem regularização. Aqui está o código:fonte
Aqui está um exemplo de por que você desejaria fazê-lo (e aproximadamente como).
Eu tenho três modelos preditivos de preços da habitação: linear, aumento de gradiente, rede neural.
Quero misturá-los em uma média ponderada e encontrar os melhores pesos.
Executo regressão linear e obtenho uma solução com pesos como -3,1, 2,5, 1,5 e alguns interceptos.
Então, o que eu faço usando o sklearn é
E recebo pesos positivos que somam (muito perto) a 1. No meu exemplo, quero o alfa que funciona melhor fora da amostra, para usar o LassoCV com validação cruzada.
Os documentos do sklearn afirmam que você não deve definir alfa como 0 por razões numéricas; no entanto, você também pode usar Lasso () direto e definir o parâmetro alfa o mais baixo possível para obter uma resposta razoável.
fonte