Ich verwende eine standardmäßige lineare Regression mit Scikit-Learn in Python. Ich möchte jedoch erzwingen, dass die Gewichte für jedes Merkmal alle positiv sind (nicht negativ). Kann ich das auf irgendeine Weise erreichen? Ich habe in der Dokumentation gesucht, aber keinen Weg gefunden, dies zu erreichen. Ich verstehe, dass ich möglicherweise nicht die beste Lösung bekomme, aber ich muss die Gewichte nicht negativ sein.
quelle
Bei Scikit Learn verwende ich eine Problemumgehung mit Lasso (dies ist definitiv nicht die beste Methode, aber sie funktioniert gut). Lasso hat einen Parameter, mit
positive
demTrue
die Koeffizienten positiv eingestellt und erzwungen werden können. Wenn Sie den Regularisierungskoeffizientenalpha
auf nahe 0 einstellen, ahmt das Lasso die lineare Regression ohne Regularisierung nach. Hier ist der Code:quelle
Hier ist ein Beispiel, warum Sie dies tun möchten (und ungefähr wie).
Ich habe 3 prädiktive Modelle der Immobilienpreise: linear, Gradientenerhöhung, neuronales Netz.
Ich möchte sie zu einem gewichteten Durchschnitt zusammenfassen und die besten Gewichte finden.
Ich führe eine lineare Regression durch und erhalte eine Lösung mit Gewichten wie -3,1, 2,5, 1,5 und einigen Abschnitten.
Also, was ich stattdessen mit sklearn mache ist
Und ich erhalte positive Gewichte, die sich (sehr nahe) zu 1 summieren. In meinem Beispiel möchte ich das Alpha, das am besten außerhalb der Stichprobe funktioniert, also verwende ich LassoCV mit Kreuzvalidierung.
In den sklearn-Dokumenten wird angegeben, dass Sie aus numerischen Gründen kein Alpha auf 0 setzen sollten. Sie können jedoch auch Straight Lasso () verwenden und den Alpha-Parameter so niedrig wie möglich einstellen, um eine vernünftige Antwort zu erhalten.
quelle