Regression Evaluation
Contents
Regression Evaluation#
회귀 문제에서 데이터를 통해 생성한 모델이 좋은지 판단하기 위해 자주사용하는 평가 함수에 대해서 알아봅니다.
Mean absolute error(MAE)#
MAE 값은 예측 값과 실제 값의 차이의 절대값의 평균을 나타냅니다.
\( \text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i - \hat{y}_i \right|. \)
예측 값이 배열 형태인 경우는 multioutput 옵션을 이용해서 MAE 값의 계산 방법을 조정할 수 있습니다. 기본적으로는 MAE 들의 평균 값을 리턴하며, ‘raw_values’ 값을 통해 변경 없이 리턴하거나, [0.3, 0.7] 가중치 배열를 통해 적용 비율을 달리 할 수 있습니다.
from sklearn.metrics import mean_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mae = mean_absolute_error(y_true, y_pred)
print("MAE={}".format(mae))
# Multioutput
y_true = [[0.5, 1], [-1, 1], [7, -6]]
y_pred = [[0, 2], [-1, 2], [8, -5]]
mae = mean_absolute_error(y_true, y_pred)
print("MAE={}".format(mae))
mae = mean_absolute_error(y_true, y_pred, multioutput='raw_values')
print("MAE={}".format(mae))
mae = mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])
print("MAE={}".format(mae))
MAE=0.5
MAE=0.75
MAE=[0.5 1. ]
MAE=0.85
Mean squared error(MSE)#
MSE 값은 예측 값과 실제 값의 차이의 제곱 값의 평균을 나타냅니다.
\( \text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (y_i - \hat{y}_i)^2. \)
from sklearn.metrics import mean_squared_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mse = mean_squared_error(y_true, y_pred)
print("MSE={}".format(mse))
y_true = [[0.5, 1], [-1, 1], [7, -6]]
y_pred = [[0, 2], [-1, 2], [8, -5]]
mse = mean_squared_error(y_true, y_pred)
print("MSE={}".format(mse))
mse = mean_squared_error(y_true, y_pred, multioutput='raw_values')
print("MSE={}".format(mse))
mse = mean_squared_error(y_true, y_pred, multioutput=[0.3, 0.7])
print("MSE={}".format(mse))
MSE=0.375
MSE=0.7083333333333334
MSE=[0.41666667 1. ]
MSE=0.825
Median absolute error(MedAE)#
MedAE는 모든 예측 값과 실제 값의 차이의 절대 값 중에 중앙 값을 구합니다. 중앙 값을 사용하기 때문에 에러 이상치에 민감하지 않게 됩니다.
\( \text{MedAE}(y, \hat{y}) = \text{median}(\mid y_1 - \hat{y}_1 \mid, \ldots, \mid y_n - \hat{y}_n \mid). \)
이 평가 함수는 multioutput 조건을 제공하지 않습니다.
from sklearn.metrics import median_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
medae = median_absolute_error(y_true, y_pred)
print("MedAE={}".format(medae))
MedAE=0.5
R² score#
R2 Score 함수는 the coefficient of determination 를 계산합니다. 이 값은 모델이 독립변수를 이용하여 종속변수를 얼마나 잘 설명할 수 있는지는 나타내는 척도입니다. 1.0 에 가까울 수록 모델의 설명력이 좋음을 나타냅니다.
\( R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} \)
multioutput 은 아래 옵션들을 지원합니다.
‘raw_values’ : 변형 없이 그대로 반환
‘uniform_average’ : uniform 가중치 평균
‘variance_weighted’ : variance 가중치 평균
array type: 지정 가중치
from sklearn.metrics import r2_score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
r2 = r2_score(y_true, y_pred)
print("R2={}".format(r2))
y_true = [[0.5, 1], [-1, 1], [7, -6]]
y_pred = [[0, 2], [-1, 2], [8, -5]]
r2 = r2_score(y_true, y_pred, multioutput='variance_weighted')
print("R2={}".format(r2))
y_true = [[0.5, 1], [-1, 1], [7, -6]]
y_pred = [[0, 2], [-1, 2], [8, -5]]
r2 = r2_score(y_true, y_pred, multioutput='uniform_average')
print("R2={}".format(r2))
r2 = r2_score(y_true, y_pred, multioutput='raw_values')
print("R2={}".format(r2))
r2_score(y_true, y_pred, multioutput=[0.3, 0.7])
print("R2={}".format(r2))
R2=0.9486081370449679
R2=0.9382566585956417
R2=0.9368005266622779
R2=[0.96543779 0.90816327]
R2=[0.96543779 0.90816327]