LeastSquares.gms : linalg ols를 사용한 당뇨병 테스트 문제에 대한 numpy.linalg.lstsq 사용 시연

설명

최소제곱 회귀 문제를 해결하려면 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를 표시합니다.