선형 회귀 분석에서 가중치를 음이 아닌 값으로 만드는 방법


27

파이썬에서 scikit-learn을 사용하여 표준 선형 회귀를 사용하고 있습니다. 그러나 가중치가 모든 기능 (음수가 아님)에 대해 모두 긍정적이되도록하고 싶습니다. 그것을 달성 할 수있는 방법이 있습니까? 나는 문서를보고 있었지만 그것을 달성 할 수있는 방법을 찾지 못했습니다. 나는 최선의 해결책을 얻지 못할 수도 있음을 이해하지만, 음이 아닌 가중치가 필요합니다.

답변:


27

당신이 찾고있는 것은 아닌 최소 제곱 회귀 입니다. 모든 계수 (가중치)가 양수 여야한다는 제약 조건이있는 2 차 프로그래밍의 간단한 최적화 문제입니다.

Scikit-Learn에는 음이 아닌 최소 제곱의 표준 구현없습니다 . 풀 요청은 여전히 ​​열려 있습니다.

그러나 Scipy가 동일한 구현을 한 것 같습니다 .

추신 : 나는 scipy 버전을 시도하지 않았습니다. 나는 인터넷 검색만으로 그것을 발견했습니다.


1
릿지 회귀가 긍정적으로 작용하는 부분은 어떻습니까?
Charlie Parker

15

Scikit Learn에서 Lasso를 사용하여 해결 방법을 사용합니다 (확실히 최선의 방법은 아니지만 잘 작동합니다). 올가미에는 계수를 양수 positive로 설정 True하고 강제 설정할 수 있는 매개 변수 가 있습니다 . 또한 정규화 계수 alpha를 0에 가깝게 설정하면 Lasso가 정규화없이 선형 회귀를 모방합니다. 코드는 다음과 같습니다.

from sklearn.linear_model import Lasso
lin = Lasso(alpha=0.0001,precompute=True,max_iter=1000,
            positive=True, random_state=9999, selection='random')
lin.fit(X,y)

0

여기 왜 당신이 그것을하고 싶은지 (그리고 대략 방법)의 예가 있습니다.

주택 가격에 대한 3 가지 예측 모델이 있습니다 : 선형, 그래디언트 부스팅, 신경망.

나는 그것들을 가중 평균으로 혼합하고 가장 좋은 무게를 찾고 싶습니다.

선형 회귀를 실행하고 -3.1, 2.5, 1.5와 같은 가중치 및 일부 인터셉트가있는 솔루션을 얻습니다.

그래서 대신 sklearn을 사용하는 것은

blendlasso = LassoCV(alphas=np.logspace(-6, -3, 7),
                     max_iter=100000,
                     cv=5,
                     fit_intercept=False,
                     positive=True)

그리고 나는 1에 가까운 (가장 가까운) 양의 가중치를 얻습니다. 제 예에서 알파는 샘플에서 가장 잘 작동하는 알파를 원하므로 교차 검증과 함께 LassoCV를 사용합니다.

sklearn docs는 숫자로 인해 알파를 0으로 설정해서는 안된다고 말하지만, Lasso ()를 사용하고 알파 매개 변수를 낮게 설정하여 합리적인 답변을 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.