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)