답변:
당신이 찾고있는 것은 음 이 아닌 최소 제곱 회귀 입니다. 모든 계수 (가중치)가 양수 여야한다는 제약 조건이있는 2 차 프로그래밍의 간단한 최적화 문제입니다.
Scikit-Learn에는 음이 아닌 최소 제곱의 표준 구현 이 없습니다 . 풀 요청은 여전히 열려 있습니다.
그러나 Scipy가 동일한 구현을 한 것 같습니다 .
추신 : 나는 scipy 버전을 시도하지 않았습니다. 나는 인터넷 검색만으로 그것을 발견했습니다.
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)
여기 왜 당신이 그것을하고 싶은지 (그리고 대략 방법)의 예가 있습니다.
주택 가격에 대한 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 ()를 사용하고 알파 매개 변수를 낮게 설정하여 합리적인 답변을 얻을 수 있습니다.