statsmodel OLS와 scikit 선형 회귀의 차이점


16

동일한 작업을 수행하는 다른 라이브러리의 두 가지 다른 방법에 대한 질문이 있습니다. 선형 회귀 모델을 만들려고합니다.

다음은 OLS와 함께 statsmodel 라이브러리를 사용하는 코드입니다.

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()

print "GFT + Wiki / GT  R-squared", results.rsquared

이 글은 GFT + Wiki / GT R-squared 0.981434611923을 출력합니다

두 번째는 scikit learn 라이브러리 선형 모델 방법입니다.

model = LinearRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)

이 글은 GFT + Wiki / GT R-squared입니다 : 0.8543

그래서 내 질문은 두 방법 모두 R ^ 2 결과를 인쇄하지만 하나는 0.98로 인쇄되고 다른 하나는 0.85입니다.

내 이해에서 OLS는 교육 데이터 세트와 함께 작동합니다. 제 질문은

  • OLS로 테스트 데이터 세트로 작업하는 방법이 있습니까?
  • traning 데이터 세트 점수에 의미가 있습니까 (OLS에서는 테스트 데이터 세트를 사용하지 않았습니다)? 나의 과거 지식으로부터 우리는 테스트 데이터로 작업해야합니다.
  • OLS와 scikit 선형 회귀의 차이점은 무엇입니까? 모델의 점수를 계산하기 위해 어떤 것을 사용합니까?

도움을 주셔서 감사합니다.

답변:


14

사용법 측면에서 첫 번째. statsmodels에서 scikit-learn과 매우 유사한 방식으로 예측을 얻을 수 있습니다. 단,fit

predictions = results.predict(X_test)

예측이 주어지면 예측 오차를 기반으로 통계를 계산할 수 있습니다

prediction_error = y_test - predictions

예측 통계의 우수성을 계산하는 별도의 함수 목록이 있지만 모델에 통합되지 않았거나 R 제곱을 포함하지도 않습니다. (샘플 데이터에서 사용되는 R 제곱에 대해 들어 본 적이 없습니다.)이를 계산하려면 사용자가 조금 더 많은 작업을 수행해야하며 통계 모델에는 동일한 통계 세트가 없습니다. 특히 이진 반응 변수가있는 분류 또는 모델에는 없습니다.

다른 두 가지 점으로 :

선형 회귀는 기본 형태로 statsmodel과 scikit-learn에서 동일합니다. 그러나 구현이 다르면 엣지 케이스에서 다른 결과를 생성 할 수 있으며 scikit learn은 일반적으로 더 큰 모델을 더 많이 지원합니다. 예를 들어 statsmodels는 현재 매우 적은 부분에서 희소 행렬을 사용합니다.

가장 중요한 차이점은 주변 인프라와 직접 지원되는 사용 사례에 있습니다.

통계 모델은 주어진 모델이 데이터에 얼마나 잘 맞는지, 어떤 변수가 "설명"하거나 결과에 영향을 미치는지 또는 효과의 크기가 무엇인지 알고 싶어하는 전통적인 모델을 따릅니다. Scikit-learn은 주요 지원 작업이 예측을위한 "최상의"모델을 선택하는 머신 러닝 전통을 따릅니다.

결과적으로 statsmodels의 지원 기능에 중점을 두는 것은 가설 테스트 및 적합도 측정을 포함하는 학습 데이터를 분석하는 것이며, scikit-learn의 지원 인프라에 대한 강조는 샘플 예측 및 "테스트 데이터"에 대한 교차 검증.

이것은 구별을 지적하며, 사용법에도 여전히 겹치는 부분이 많습니다. statsmodels는 또한 시계열 컨텍스트에서 예측 및 추가 예측을 수행합니다. 그러나 통계 모델에서 예측을 위해 교차 유효성 검사를 수행하려는 경우 통계 모델의 추정 모델과 함께 scikit-learn의 교차 유효성 검사 설정을 재사용하는 것이 여전히 쉬운 경우가 많습니다.


흠, 나는 statsmodels.tsa에서 ARMA 모델을 사용하려고하지만 예측 인터페이스는 완전히 다릅니다. 테스트 데이터를 제공하는 방법을 알고 있습니까?
ephes

1
그것은 다른 질문이며 설명서 나 예제를 봐야합니다. 시계열 모델의 예측은 순차적 인 시간 구조로 인해 상당히 다르며 예측은 다음 기간의 값을 예측합니다.
Josef

그래도 다른 질문입니다. 설명해 주셔서 감사합니다. 설명서를 읽고 어떻게 든 작동하도록했습니다. 그러나 여전히 인터페이스가 다른 이유를 이해하지 못합니다. 특히 특징 벡터를 제공하고 예측 (예측)을 제공 할 수없는 이유는 무엇입니까?
ephes

ARMA 및 SARIMAX를 사용하면 설명 변수 exog를 추정 및 예측에 포함 할 수 있습니다.
Josef

Stackowerlow에 대한이 질문은 인터페이스의 차이점을 해결합니다. stackoverflow.com/questions/41045752/…
David Dale

1

OLS 모델에서는 훈련 데이터를 사용하여 적합하고 예측합니다.

LinearRegression 모델에서는 훈련 데이터를 사용하여 예측하기 위해 데이터를 맞추고 테스트하므로 R2 점수의 결과가 다릅니다.

OLS 모델에서 테스트 데이터를 가져 오면 동일한 결과와 더 낮은 값을 가져야합니다


1

OLS가 Sklearn LinearRegression 모델과 다른 Rsquared 및 Adjusted Rsquared 값을 제공하는 비슷한 문제가 발생했습니다.

이유 : OLS는 기본적으로 절편 계수를 고려하지 않고 모델없이 모델을 작성하며 Sklearn은 모델을 작성할 때 모델을 고려합니다.

솔루션 : 데이터 세트에 1의 열을 추가하고 OLS를 사용하여 모델을 맞추면 거의 동일한 Rsquared 및 Adj가 표시됩니다. 두 모델의 제곱 값입니다.

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