Korzystam ze standardowej regresji liniowej za pomocą scikit-learn w python. Chciałbym jednak wymusić, aby wagi były dodatnie dla każdej cechy (nie ujemne), czy jest jakiś sposób, aby to osiągnąć? Szukałem w dokumentacji, ale nie mogłem znaleźć sposobu na osiągnięcie tego. Rozumiem, że nie mogę znaleźć najlepszego rozwiązania, ale potrzebuję, aby wagi były nieujemne.
źródło
Korzystam z obejścia z Lasso w Scikit Learn (zdecydowanie nie jest to najlepszy sposób na robienie rzeczy, ale działa dobrze). Lasso ma parametr,
positive
który można ustawićTrue
i wymusić, aby współczynniki były dodatnie. Ponadto ustawienie współczynnikaalpha
regularyzacji na wartość bliską 0 powoduje, że Lasso naśladuje regresję liniową bez regularyzacji. Oto kod:źródło
Oto przykład, dlaczego chcesz to zrobić (i w przybliżeniu jak).
Mam 3 modele prognostyczne cen mieszkań: liniowy, zwiększanie gradientu, sieć neuronowa.
Chcę połączyć je w średnią ważoną i znaleźć najlepsze wagi.
Prowadzę regresję liniową i otrzymuję rozwiązanie z wagami takimi jak -3,1, 2,5, 1,5 i niektórymi punktami przechwytywania.
Więc zamiast tego używam sklearn
I otrzymuję dodatnie wagi, które sumują się (bardzo blisko) do 1. W moim przykładzie chcę, aby alfa działało najlepiej poza próbką, więc używam LassoCV z walidacją krzyżową.
Dokumenty sklearn stwierdzają, że nie powinieneś ustawiać alfa na 0 z powodów numerycznych, jednak możesz również użyć prostej Lasso () i ustawić parametr alfa tak niski, jak to tylko możliwe, aby uzyskać rozsądną odpowiedź.
źródło