Regression Evaluation

2023. 8. 3. 09:58개인활동/파이썬 머신러닝 완벽가이드

평가

  • 모델을 돌렸다면 얼마나 이 모델이 정확한지 파악할 수 있어야 한다.
  • 어떤 모델을 사용하냐에 따라 성능평가지표가 달라진다.
  • 평가가 가능한 것은 정답이 있는 학습 방식이다.
    • Quiz1
    • 정답이 있는 학습방식에서만 평가가 가능한 이유는 무엇일까?
  • 머신러닝에서 성능평가지표를 이용해 평가할 수 있는 것은 supervised learning (지도학습)이다.
  • 딥러닝 모델들 중 label(정답)이 존재하는 모델이라면 마찬가지로 성능평가지표를 이용해 모델의 성능을 파악할 수 있다.

성능평가지표

  1. Classification 성능평가지표
  2. Regression 성능평가지표

2. Regression 성능 평가지표

1 ) MAE
2 ) MSE
3 ) RMSE
4 ) MSLE, RMSLE
5 ) R^2

1) MAE
  • Mean Absolute Error
  • 직독직해하면 오차의 절댓값의 평균을 의미한다.
  • 오차(error)란 실제 값과 예측값 사이의 차이(gap)을 의미한다.
    • Regression 식을 시각화하면 끊기지 않는 line plot이 그려진다.
    • 이 line plot이 실제 값이라고 할 때 점들은 regression 모델이 예측한 값이다.
    • 여기서 실제 값과 예측값 사이의 차이가 error가 된다.

  • MAE는 절댓값을 씌운 error값을 모두 더해 평균을 낸 것을 의미한다.
    • 절댓값을 씌운 이유는 실제 값보다 예측값이 클 수도 있고, 실제 값보다 예측값이 작을 수도 있기에 앞에 붙는 부호를 없애기 위해서다.
      $$ MAE = \frac{1}{n}\sum_{i=1}^n{\vert Yi - \hat{Y}i\vert}$$
  • 값이 작을 수록 오차가 작음을 의미, 오차가 작을 수록 예측 정확도가 높다고 볼 수 있다.
# 사용할 라이브러리를 모두 불러옴
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
import numpy as np
import pandas as pd
# 데이터 학습을 위해 독립변수(X)와 종속변수(Y)를 나눠 줌
# 독립변수 = X = features = target을 제외한 나머지 columns
# 종속변수 = y = target = class

# 사용할 데이터 간단 설명
## 당뇨병 진행도를 나타내는 데이터로 주어진 features를 이용해 어느정도 진행되었을지 예측하는 것이 목표임
data = load_diabetes()

X = data.data
y = data.target
# train set과 test set 분리해주기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
# 학습시킬 모델 불러오기
# linear regression(선형회귀)
lr = LinearRegression()

# train
lr.fit(X_train, y_train)

# test
pred = lr.predict(X_test)

# mae로 평가하기
mae = mean_absolute_error(y_test, pred)
print("mae: {0:.5}".format(mae))

2) MSE
  • Mean Squared Error
  • MAE와 다른 점은 절댓값을 씌운 것이 아닌 error 값을 제곱해 평균을 낸 것이다.
  • sklearn에서 메소드를 제공하고 있다.
    $$ MSE = \frac{1}{n}\sum_{i=1}^n{( Yi - \hat{Y}i)^2} $$
3) RMSE
  • Root Mean Squared Error
  • MSE와 다른 점은 MSE 값에 루트를 씌운 것이다.
  • sklearn에서 제공하고있지 않기 때문에 numpy를 이용해 mse 값에 루트를 씌워줘야 한다.
  • 다른 방법으로는 mean_squared_error에서 squared 파라미터를 False로 설정해준다.
    $$ MSE = \sqrt{\frac{1}{n}\sum_{i=1}^n{( Yi - \hat{Y}i)^2}} $$
# 제곱값이라 굉장히 크게 보이는 것을 확인할 수 있음
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, pred)
mse

# np.sqrt() : 괄호 안에 값을 넣어주면 루트를 씌워줌
rmse1 = np.sqrt(mse)
rmse2 = mean_squared_error(y_test, pred, squared=False)

print(rmse1, rmse2)

S

4) MSLE, RMSLE
  • Mean Squared Log Error
  • Root Mean Squared Log Error
  • MSE 혹은 RMSE에서 로그를 이용한 평가지표이다.
  • MSLE의 경우 sklearn에서 메소드를 제공하나 RMSLE의 경우 제공하지 않아 RMSE의 경우 numpy를 이용해 구해야 한다.
    $$ MSLE = \frac{1}{n}\sum_{i=1}^n{( log_e(1+Yi) - log_e(1+\hat{Y}i))^2} $$
    $$ RMSLE = \sqrt{\frac{1}{n}\sum_{i=1}^n{( log_e(1+Yi) - log_e(1+\hat{Y}i))^2}}$$
from sklearn.metrics import mean_squared_log_error

# msle 구하기
msle = mean_squared_log_error(y_test, pred)
msle

# rmsle 구하기
rmsle = np.sqrt(msle)
rmsle2 = mean_squared_log_error(y_test, pred, squared=False)
print(rmsle, rmsle2)

5) R^2
  • 분산을 기반으로 예측 성능을 평가한다.
  • 실제 값의 분산 대비 예측값의 분산을 비율화 한다.
  • 1에 가까울수록 예측 정확도가 높다.
    $$ R^2 = \frac{예측값 분산}{실제값 분산} $$
from sklearn.metrics import r2_score

# r^2 구하기
r2 = r2_score(y_test, pred)
r2

'개인활동 > 파이썬 머신러닝 완벽가이드' 카테고리의 다른 글

Classification Evaluation  (0) 2023.08.02
앙상블 분류 모델  (0) 2023.05.01