[파이썬] 선형회귀 간단하게 구현

반응형
반응형

파이썬으로 선형회귀 모델 만들기

이전 포스팅에서 선형회귀에 대한 이론적인 내용을 했었는데 파이썬으로 구현할 때 본의아니게 많이 어렵게 코딩을 한 것 같습니다. 그래서 scikit-learn 과 statsmodel을 이용해 선형회귀를 구현하는 방법을 포스팅합니다.

이미 되어있는 걸 가져다 쓰면 되기 때문에 간단합니다.

scikit-learn 을 이용한 방법

numpy와 scikit-learn을 이용한 방법입니다.
선형회귀 모델에 데이터를 훈련해서 회귀계수를 찾아냅니다.

먼저 데이터를 가져옵니다. 예제이므로 간단하게 만들었습니다. 실제 데이터를 가져온다면 입력데이터와 타킷데이터를 구분합니다.

import numpy as np
from sklearn.linear_model import LinearRegression

# 입력 데이터
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # 입력 데이터는 1차원 배열이므로 2D 배열로 변환

# 대상 변수(타깃)
y = np.array([2, 4, 5, 4, 5])

선형회귀 모델을 생성합니다. 이미 scikit-learn 에 LinearRegression()이라는 함수가 있으므로 가져다 씁니다.

'# 선형 회귀 모델 생성
model = LinearRegression()

데이터를 기반으로 모델을 훈련시킵니다.

# 모델 훈련
model.fit(X, y)

훈련된 모델에서 최종적인 slope와 y-intercept을 가져옵니다.

# 모델의 기울기와 절편
slope = model.coef_[0]
intercept = model.intercept_
print(f"기울기: {slope}, 절편: {intercept}")

평가를 위해서 R^2 score도 계산할 수 있습니다.

from sklearn.metrics import r2_score

y_pred = model.predict(X)
# R^2 계산
r_squared = r2_score(y, y_pred)
print(f"R^2 값: {r_squared}")

statsmodel을 이용한 방법

마찬가지 방법으로 합니다.

## statsmodel을 이용한 방법
import numpy as np
import statsmodels.api as sm

# 입력 데이터
X = np.array([1, 2, 3, 4, 5])

# 대상 변수(타깃)
y = np.array([2, 4, 5, 4, 5])

X에 상수항을 추가합니다.
상수항을 추가하지 않으면 모든 독립 변수의 값을 0으로 간주하는 모델로 인식합니다. 원래 데이터는 원점을 지나지 않은 경우가 더 많기 때문에 일반화를 위해 상수항을 추가시킵니다.

X = sm.add_constant(X)

모델을 생성하고 훈련시킵니다. summary()를 이용하면 선형회귀 모델에 전체결과를 보실 수 있습니다. statsmodel 모듈 자체가 R에서 왔기 때문에 summary가 잘 되어 있습니다. 선형계수와 R^2도 모두 한번에 볼 수 있습니다.

model = sm.OLS(y, X).fit()
print(model.summary())

기울기와 절편을 따로 보고 싶다면 아래와 같이 합니다.

slope = model.params[1]
intercept = model.params[0]
print(f"기울기: {slope}, 절편: {intercept}")

 

함께 보면 좋은글

[Python] 회귀(Regression)

선형회귀(Linear regression)

데이터목장님의
글이 좋았다면 응원을 보내주세요!

Designed by JB FACTORY