설명
최소제곱 회귀 문제를 해결하려면 linalg.ols 도구를 사용하세요. 이 모델은 다음과 동일한 통계 값을 얻는 방법을 보여줍니다. LS 솔버(슬롯 무료체험 34에서 삭제됨) 또한 기능 세트 p의 하위 집합이 있는 루프의 기능
카테고리 : 슬롯 무료체험 데이터 유틸리티 라이브러리
메인 파일 : LeastSquares.gms 포함: LeastSquares.gms ls.gdx diabetes_data.gdx
$title linalg ols를 사용하여 당뇨병 테스트 문제에 numpy.linalg.lstsq 사용을 시연합니다(LeastSquares,SEQ=141).
$onText
최소 제곱 회귀 문제를 해결하려면 linalg.ols 도구를 사용하십시오.
이 모델은 다음과 동일한 통계 값을 얻는 방법을 보여줍니다.
LS 솔버(슬롯 무료체험 34에서 삭제됨) 또한
기능 세트 p의 하위 집합이 있는 루프의 기능입니다.
$offText
내가 '환자'로 설정
p '기능';
매개변수
A(i<,p<) '당뇨병 환자 집단으로부터 수집된 특징'
y(i) '기준일로부터 1년 후 질병 진행의 정량적 측정';
* https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html의 데이터
$gdxin 당뇨병_데이터.gdx
$load Ay
$gdxIn
$설정되지 않은 경우 EXPLICITINTERCEPT $set EXPLICITINTERCEPT 1
$ifThen %EXPLICITINTERCEPT%==1
$onMulti
p / b0 가로채기 / 설정;
$off멀티
A(i,'b0') = 1;
$endIf
스칼라
rss '오차 제곱합'
시그마 '표준 오류'
r2 'R-제곱'
df '자유도'
resvar '잔차 분산';
매개변수
estimate(p) '추정된 계수'
se(p) '표준 오류'
tval(p) 't 값'
pval(p) 'p 값'
잔차(i) '잔차'
Fitted(i) '종속변수에 대한 적합값'
covar(p,p) '분산-공분산 행렬';
$funcLibIn Stolib Stodclib
기능
cdfT / Stolib.CDFStudentT /
icdfT / Stolib.iCDFstudentT /;
ExecuteTool.checkErrorLevel 'linalg.ols i p A y 추정 covar=covar r2=r2 df=df rss=rss resvar=resvar se=se tval=tval Fitted=fitted resid=resid sigma=sigma';
* 기호 추정치, covar, r2, df, rss, resvar, se, tval, Fitted, resid 및 sigma)가 로드되었습니다.
* 암묵적으로 ExecutionTool../modlib/maxcut.338에 의해. 다음 줄의 컴파일러 명령은 다음을 억제합니다.
* 아마도 할당되지 않은 기호에 대한 오류
$onImplicitAssign
pval(p) = 2*(1-cdfT(abs(tval(p)),df));
알파 설정 / "90%", "95%", "97.5%", "99%" /;
매개변수
av(알파) / "90%" .9
"95%" .95
"97.5%" .975
"99%" .99 /;
매개변수 confint(alpha,p,*) '신뢰구간'
스칼라 q, t;
루프(알파,
t = -icdfT((1-av(알파))/2, df);
confint(alpha, p, 'LO') = 추정(p) - t*se(p);
confint(alpha, p, 'UP') = 추정값(p) + t*se(p);
);
Execute_unload 'ls_np.gdx',confint,covar,df,estimate,fitted,pval,r2,resid,resvar,rss,se,sigma,tval;
Execute.checkErrorLevel 'gdxdiff ls.gdx ls_np.gdx eps=1e-4 releps=1e-4 > %system.nullFile%'
* 이제 기능 하위 집합을 사용하여 OLS를 동적으로 사용하는 방법을 보여줍니다.
pp(p) '기능의 하위 집합' 설정
iter '반복' / iter1*iter20 /
bestp(p) '가장 좋은 기능 하위 집합'
매개변수
Ap(i,p) 'A 감소'
최고 / inf /
beste(p) '최상의 추정치';
루프(반복,
옵션 클리어=pp, 클리어=Ap;
pp(p)$(uniform(0,1)<0.5) = 예;
$if %EXPLICITINTERCEPT%==1 pp('b0') = 예;
Ap(i,pp) = A(i,pp);
ExecuteTool.checkErrorLevel 'linalg.ols i pp Ap y 추정 rss=rss';
put_utility 'log' / iter.tl:10 ': rss=' rss;
if (bestrss>rss, bestp(p) = pp(p); bestrss = rss; beste(p) = estimate(p));
);
bestrss, bestp, beste를 표시합니다.