목차
1. 선형 회귀 모델 성능평가 지표:
2. 파이썬 sklearn 모듈로적용
지난 시간에 규제화에 대해서 알아보았다. (참고글 - 규제화(Regularization): L1, L2 penalty term) 규제화란, 지도학습 모델의 성능 평가 단계에서 과적합(Overfitting)이 일어나는 경우에 이를 해결하기 위해서 사용하는 방법이라고 했다. 그렇다면, 과적합 또는 과소적합으로 인해 모델의 성능이 얼마나 떨어지는지는 어떻게 알 수 있을까? 학습 데이터를 통해 학습단계에서 학습을 시킨 모델을 평가 데이터에도 학습을 시키고 나서 특정 평가지표를 통해 모델의 성능을 확인할 수 있다.
성능 평가 단계에서 사용하는 특정 평가지표는 우리가 풀어야 할 문제가 어떤 문제인가에 따라 다르다. 힌트 정보와 정답정보가 모두 주어지는 지도학습 알고리즘을 적용시키는 문제에는 크게 회귀문제와 분류문제가 있었고, 이 글에서는 회귀문제에서 사용하는 평가 지표인

1. 선형 회귀 모형 성능평가 지표:
선형 회귀 모형에서의 대표적인 성능 평가 지표는

여기서
SSR은 Sum of Squares Regression의 약자로, 학습을 시킨 선형회귀 모델이(위 그림의 bar) 실제 종속변수의 평균과 얼마나 떨어져 있는지를 나타낸다. Explained sum of squares의 약자인 ESS도 같은 의미로 쓰인다.
추가적인 설명을 하자면, SSE는 Sum of Squares Residual Error의 약자로, 종속변수의 실제 값들이 평균과 떨어져 있는 정도를 모델이 설명하지 못하는 정도를 나타낸다. Residual sum of squares의 약자인 RSS와도 같은 의미이다. 식으로 표현하면 다음과 같다.
다시, 위 그림을 보면
2. 파이썬 sklearn 모듈로 적용
이제 파이썬에서 제공하는 sklearn 모듈을 통해서 실제 데이터를 학습시키고, 모델을 평가하는 단계까지 시행해 보자. 먼저 학습시킬 데이터를 불러와야 한다. 보통 케글이나 데이콘에서 데이터셋을 받으면, train data와 test data로 나뉘어 있다. 우리는 train data를 통해서 모델의 학습 및 성능 평가를 완료를 한 뒤에 최종적으로 그 모델을 test data에 적용시켜야 한다. 그러므로 train data를 먼저 불러온다.
import numpy as np
import pandas as pd
data = pd.read_csv("train_data.csv") # train data 불러오기
불러온 데이터에 중에 종속변수로 활용할 컬럼이 있을 것이다. 그 컬럼을 y로, 그리고 독립변수로 사용할 컬럼을 X로 나누어주어야 한다.
y = data["종속변수 컬럼"]
X = data.drop("종속변수 컬럼", axis = 1)
# ↑종속변수를 제외한 모든 독립컬럼을 X로 지정하고 싶을 때
이 데이터를 다시 학습데이터와 평가 데이터로 분리시켜야 한다. sklearn 모듈에서 제공하는 train_test_split() 함수를 통해 학습데이터와 평가데이터로 랜덤 하게 분리시켜 준다. 이때, 비율을 정할 수 있다. 여기서는 평가 데이터를 전체 학습 데이터 중에 30% 지정해 보겠다. 이를 test_size = 0.3으로 설정해 줄 수 있다. train_test_split 함수는 학습 데이터와 평가 데이터를 랜덤 하게 나누기 때문에, 이를 수행할 때마다 똑같은 데이터를 기준으로 나누고 싶을 때, random_state를 설정해 주면 수행 시 결괏값을 동일하게 맞춰줄 수 있다. 이때, random_state에는 어떤 숫자를 적든 그 기능은 같기 때문에 어떤 숫자를 적든 상관없다.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
LinearRegression() 함수를 선택하여 모델을 선형회귀 모델로 설정해 준다. 그러고 나서 선택한 모델에 분리시켰던 train data를 fit() 함수를 이용해 학습시켜 준다. 학습이 끝나면, score() 함수를 분리시킨 test data에 적용하여
from sklearn.linear_model import LinearRegression
model = LinearRegression() # 선형회귀 모델 선택
model.fit(X_train, y_train) # 데이터 학습
model.score(X_test, y_test) # 모델 성능 평가 = R^2
추가적으로 학습시킨 모델의 파라미터 값을 확인하고 싶다면, coef_ 함수와 intercept_함수를 통해 확인할 수 있다.
- model.coef_ : 학습시킨 모델의 b1, b2,..., bk 파라미터 값, 즉 각 독립변수들에 대한 기울기를 나타낸다.
- model.intercept_ : 학습시킨 모델의 b0 파라미터 값, 즉 모델의 y절편을 나타낸다.
또 다른
from sklearn.metrics import r2_score
r2_score(y_test, model.predict(X_test)) # 모델 성능 평가 = R^2
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, model.predict(X_test)) # mse
mse**0.5 # rmse
rmse = np.sqrt(mse) #rmse
'통계, AI' 카테고리의 다른 글
로지스틱 회귀 모형: 함수 개념 및 코딩 실습 (0) | 2023.05.29 |
---|---|
회귀모델: 라쏘(Lasso), 릿지(Ridge), 엘라스틱 넷(ElasticNet) (0) | 2023.05.29 |
피처 스케일링: 표준화, min-max 정규화(feat. 파이썬) (1) | 2023.05.28 |
규제화(Regularization): L1, L2 penalty term (2) | 2023.05.23 |
기계학습(ML): 선형회귀 모델 학습 원리, 성능 평가 방법 (4) | 2023.05.19 |
댓글