본문 바로가기

카테고리 없음

선형회귀 분석 - statsmodels ols, OLS sklearn LinearRegression 차이 및 예시

Statsmodels의 ols, OLS의 사용 예시와 sklearn LinearRegression의 차이를 다룬 포스팅입니다.

 

statsmodels.api 의 OLS와 formula.ols

 

statsmodels의 ols와 OLS 또한 선형 회귀모델의 최소제곱법을 활용한 모델이다.

아래부터는 각 모델의 예시 코드 및 과정입니다.

import pandas as pd
import statsmodels.api as sm 
from statsmodels.formula.api import ols
from sklearn.linear_model import LinearRegression

train = pd.read_csv('bmi-dataset/BMI_Dataset_train.csv')
test = pd.read_csv('bmi-dataset/BMI_Dataset_test.csv')      
train.columns = ['ID','Height','Weight','BMI']              ## train dataset columns 명 변경
test.columns = ['ID','Height','Weight']                     ## test dataset columns 명 변경
 
데이터 출처 : BMI Dataset (kaggle.com)

ols 코드

ols_model = ols(formula='Weight ~ Height',data=train).fit()
      #formula에 종속 변수 ~ 독립 변수의 column명으로 할당, data는 dataframe 명
      #독립 변수가 2개 이상인 경우 '종속변수 ~ 독립변수 + 독립변수 ....'으로 표기한다
      # 2개인 경우를 예시로 보면 : 'Weight ~ Height + BMI'
ols_pred = ols_model.predict(test.Height) 
print(ols_model.summary())
      #summary를 확인하면 학습 모델의 거의 모든 정보를 확인할 수 있다(절편, 기울기, R, adj.R 등등)
print('-----------------------------------------')
print(ols_pred)
 

 

OLS 코드

OLS_X = sm.add_constant(train.Height)     #절편 추가를 위한 독립 변수에 절편항 추가 
OLS_model = sm.OLS(endog=train.Weight, exog=OLS_X).fit() # 모델 학습
OLS_model.summary()
test_x = sm.add_constant(test.Height)   
     #학습 시 절편 추가를 위해 추가했다면 test 데이터에도 절편항 추가 필요
OLS_model.predict(test_x)
 

 

ols와 OLS는 모델 학습시 x,y 설정을 어떻게 할지, 절편 학습 유무의 차이만 가지고 있고,

이외에 사용되는 명령어들은 똑같고, 자주 사용되는 함수들은 아래와 같다.

 
명령어
의미
fit()
모델 학습
predict()
학습 데이터로 결과 예측
summary()
학습 모델의 레포트 출력
params()
모델의 회귀 계수및 절편 추출

 

각 모델들의 특징 및 차이점

 
 

ols
OLS
LinearRegression
절편 설정
절편이 항상 포함됨
조절 불가능
독립 변수에 add_constant
이후 학습으로 조절 가능
모델학습시 fit_intercept 항목으로 조절 가능
선형 회귀 방식
최소 제곱법
최소 제곱법
최소 제곱법

 

모델 모두 최소제곱법을 기준으로 데이터를 학습하고 예측 하기 때문에 값은 거의 동일하게 나온 것을 알 수 있다,

하지만 위 그림을 보면 알 수 있듣이 세세한 값을 확인 하고 싶다면 sklean의 Linear가 더 세밀하게 값을 return 해주는 것을 알 수있다.

다만 결정계수나 조정된 결정계수등 OLS 모델을 통하면 모델 학습이후 간단하게 값을 확인 할수있지만 sklean의 Linear의 경우 계산을 직접하거나 명령어가 좀더 추가가 되어야 되는것이 차이라고 볼 수 있다.

 

sklearn 의 코드

Sklearn-LinearRegression 간단한 예제로 알아보기(자주사용하는 함수들) (tistory.com)