J'utilise une régression linéaire standard en utilisant scikit-learn en python. Cependant, je voudrais forcer les poids à être tous positifs pour chaque caractéristique (et non négatifs), y a-t-il un moyen de le faire? Je cherchais dans la documentation mais je n'ai pas trouvé de moyen d'y parvenir. Je comprends que je n'obtiendrai peut-être pas la meilleure solution, mais j'ai besoin que les pondérations soient non négatives.
la source
J'utilise une solution de contournement avec Lasso sur Scikit Learn (ce n'est certainement pas la meilleure façon de faire les choses, mais cela fonctionne bien). Lasso a un paramètre
positive
qui peut être réglé surTrue
et forcer les coefficients à être positifs. De plus, si le coefficient de régularisation estalpha
proche de 0, le Lasso imite la régression linéaire sans régularisation. Voici le code:la source
Voici un exemple de la raison pour laquelle vous souhaitez le faire (et approximativement comment).
J'ai 3 modèles prédictifs des prix des logements: linéaire, boosting de gradient, réseau neuronal.
Je veux les mélanger dans une moyenne pondérée et trouver les meilleurs poids.
Je lance une régression linéaire et j'obtiens une solution avec des poids comme -3,1, 2,5, 1,5 et une certaine interception.
Donc, ce que je fais à la place en utilisant sklearn est
Et j'obtiens des poids positifs qui totalisent (très près) à 1. Dans mon exemple, je veux l'alpha qui fonctionne le mieux hors échantillon, alors j'utilise LassoCV avec validation croisée.
Les documents sklearn indiquent que vous ne devez pas mettre alpha à 0 pour des raisons numériques, mais vous pouvez également utiliser le Lasso droit () et définir le paramètre alpha aussi bas que possible pour obtenir une réponse raisonnable.
la source