Python/Sklearn

[Sklearn] 파이썬으로 선형 회귀 분석하기 예제 (Linear Regression)

jimmy_AI 2021. 11. 23. 14:54
반응형

이번 포스팅에서는 파이썬 사이킷런 모듈로 선형 회귀 분석을 진행하는 방법에 대하여 간단히 다루어보도록 하겠습니다. 우선, 데이터셋으로는 kaggle의 Bike Sharing Demand 학습 데이터셋을 사용하였습니다.

 

데이터셋의 생김새는 다음과 같습니다.

여기서는 'season', 'holiday', 'weather', 'temp', 'humidity', 'windspeed' 6개의 정보로 해당 시간대의 자전거 대여수인 'count'를 회귀 모델로 예측하는 선형 회귀 모델을 세운다고 가정해보겠습니다. (숫자 feature만 이용이 가능하며, 아닌 경우 이용하기를 원할 때는 one-hot encoding 등 전처리가 필요합니다.)

 

파이썬 사이킷런 선형 회귀 모델 분석 과정

우선, 먼저 학습에 사용할 feature와 예측할 target feature를 가지고 train / test 데이터 셋을 분리하도록 하겠습니다.

from sklearn.model_selection import train_test_split

# 학습에 사용할 feature 선정 후 train / test dataset 분리
X = df[['season', 'holiday', 'weather', 'temp', 'humidity', 'windspeed']]
y = df['count']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 99)

 

사이킷런의 선형 회귀 모델을 불러와 학습시키는 코드는 다음과 같이 간단하게 작성할 수 있습니다. 여기서도 몇 가지 인자를 input으로 지원하기는 하나(ex. 정규화 여부 등), 여기서는 input 인자 없이 바로 선언해보도록 하겠습니다.

from sklearn.linear_model import LinearRegression

# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)
반응형

사이킷런 선형 회귀 모델 회귀식

학습된 선형 회귀 모델의 회귀식을 살펴보도록 하겠습니다. model.coef_ 를 호출하면 학습 feature 순서 대로 가중치의 값이 나옵니다. 다음과 같이 회귀식을 깔끔하게 출력해보도록 하겠습니다.

선형 회귀 모델 회귀 성능 평가(RMSE)

마지막으로, 학습된 선형 회귀 모델에 대하여 회귀 성능을 평가해보도록 하겠습니다.

여기서는 예측 값과 실제 값 사이의 차이의 제곱합에 루트를 씌운 RMSE를 사용하여 얼마나 회귀 예측이 잘 들어맞는지를 보았습니다. 이 값은 낮을수록 실제 값을 잘 맞추었다는 의미로, 성능이 좋음을 의미합니다.

# RMSE로 회귀 결과 성능 평가(테스트 셋 이용)

from sklearn.metrics import mean_squared_error

y_pred = model.predict(X_test) # 예측 값
mean_squared_error(y_pred, y_test, squared = False)

실행결과 약 152 정도의 RMSE가 측정되었습니다.

 

아마도, 자전거를 빌린 시간대 정보(새벽, 오전, 오후, 저녁 등)나 몇월인지에 대한 정보를 포함하는 등 회귀 모델의 성능을 향상시킬 수 있는 방법은 더 있을 것이라 생각됩니다.

 

여기까지 선형 회귀 모델을 실제 데이터셋에 적용하는 파이썬 사이킷런의 코드를 간단히 살펴보았습니다.