-1

데이터 집합에 다 변수 선형 회귀 분석을 적용하여 모델에서 데이터를 얼마나 잘 설명하는지 알아보기 위해 노력하고 있습니다. 내 예측은 120 치수를하고 난 177 개 샘플이 = (177120)statsmodels와 scikit-learn에 의한 서로 다른 모델 성능 평가

X.shape을 y.shape = (177) statsmodels를 사용

, 나는 R-제곱으로 0.76의 아주 좋은 얻을 Prob (F- 통계량)는 0.06으로 유의성에 대한 추세이며 데이터에 대한 좋은 모델을 나타냅니다.

scikit-learn의 선형 회귀 분석을 사용하여 5 배 교차 유효성 검정 r2 점수를 계산할 때 평균 r2 점수가 -5.06으로 매우 낮은 일반화 성능을 나타냅니다.

두 모델은 열차 r2 점수와 정확히 같아야합니다. 그렇다면이 라이브러리의 성능 평가가 왜 너무 다른가요? 어느 것을 사용해야합니까? 이것에 대한 여러분의 의견에 진심으로 감사드립니다. 때문에 훈련 샘플 및 왼쪽으로 교차 검증 시료 사이의 차이 rsquared에서

# using statsmodel: 
    import statsmodels.api as sm 
    X = sm.add_constant(X) 
    est = sm.OLS(y, X) 
    est2 = est.fit() 
    print(est2.summary()) 

    # using scikitlearn: 
    from sklearn.linear_model import LinearRegression 
    lin_reg = LinearRegression() 
    lin_reg.fit(X, y) 
    print 'train r2 score:',lin_reg.score(X, y) 
    cv_results = cross_val_score(lin_reg, X, y, cv = 5, scoring = 'r2') 
    msg = "%s: %f (%f)" % ('r2 score', cv_results.mean(),cv_results.std()) 
    print(msg) 

답변

2

의 차이 :

은 여기 참조 내 코드입니다.

정규화 또는 변수 선택없이 일정하고 177 회의 관측을 포함하여 121 개의 회귀 분석기가 강하게 오버 피팅됩니다.

Statsmodels은 훈련 샘플에 대해 rsquared, R2 만보고하고 교차 유효성 검사는 없습니다. Scikit-learn은 교차 검증을 위해 훈련 샘플 크기를 줄여야 overfitting을 더욱 악화시킬 필요가 있습니다.

scikit-learn에서보고 한 교차 유효성 검사 점수가 낮 으면 초과 맞춤 추정치가 왼쪽 데이터로 일반화되지 않고 교육 샘플의 고유 한 특성과 일치 함을 의미합니다.

+0

감사합니다. 사용자 333700. 나는 열차와 시험 점수의 차이를 알고 있지만, prob (F- 통계)는 무엇을 의미합니까? 통계적으로 유의미하거나 그 경향이 우리가 좋은 모델을 가지고 있다는 것을 의미합니까? – Behrouz

+1

이 모델은 r 통계 및 f- 통계의 측면에서 상당히 잘 맞지만 샘플 밖의 예측이라는 측면에서 볼 때 적합합니다. rsquared도 f- 테스트도 overfitting에 대한 벌칙. 더 나은 수표는 AIC 또는 BIC입니다 (예 : 가장 중요한 설명 변수를 삭제 한 후 문제는 모델이 훈련 데이터에 적합하지만 매개 변수 추정치가 설명 변수 당 관측치의 수가 적다면 정확하지 않고 정확하지 않습니다. 나는 당신의 표준 오류와 매개 변수에 대한 신뢰 구간이 대부분 꽤 클 것 같아요. – user333700