오늘은 머신러닝의 성능평가와 알고리즘에 대해 배웠습니다.
▶회귀모델 성능평가
회귀모델 평가는 얼마나 그 값과 근사한지를 평가하므로 오차가 존재합니다. 예측 값이 얼마나 실제 값에 가까운지에 따라 성능이 좋은 모델이라고 평가할 수 있습니다. 즉 회귀모델의 평가는 오차가 얼마나 적은지를 평가합니다.
예측값이 평균보다 오차를 줄인 모델을 만들어내야합니다.
▶오차합 구하기
오차합을 구하는 방법으로는 제곱의 합과 절대값의 합이 있습니다.
오차 제곱의 합 : Sum Squared Error(SSE) -> Mean sSE(MSE) -> Root MSE(RMSE)
SSE는 모든 오차를 제곱한 후에 그 값들을 더해준 값입니다.
MSE는 SSE를 각 더해준 수만큼 나눠 평균을 내준 것입니다.
RMSE는 MSE에 Root를 씌워 값을 내줍니다.
※루트값을 구하는 방법은 **(0.5)를 해줍니다.
RMSE가 고객들과 이야기를 할 수 있는 수치를 보여주는 오차 제곱의 합으로 구한 오차범위 평균입니다.
오차 절대값의 합은 MAE와 MAPE가 있습니다.
오차 절대값의 합 - Mean Absolute Error(MAE)
퍼센트 오차 절대값의 합 -> Mean Absolute Percentage Error(MAPE)
MAE가 고객들과 이야기할 수 있는 오차 절대값 합으로 구한 오차범위 평균입니다. MAPE는 수치가 낮을수록 좋은 모델이라 평가할 수 있습니다.
먼저 오차범위 절대값의 합인 MAE를 보겠습니다.
# 모듈 불러오기
from sklearn.metrics import mean_absolute_error
# 성능 평가
print('MAE : ', mean_absolute_error(y_test, y_pred))
다음으로 퍼센트로 MAE를 구한 MAPE를 보겠습니다.
# 모듈 불러오기
from sklearn.metrics import mean_absolute_percentage_error
# 성능 평가
print('MAPE :',mean_absolute_percentage_error(y_test, y_pred))
오차범위 제곱의 합을 평균을 낸 MSE를 보겠습니다.
# 모듈 불러오기
from sklearn.metrics import mean_squared_error
# 성능 평가
print('MSE : ', mean_squared_error(y_test, y_pred))
MSE를 루트 씌운 RMSE를 보겠습니다.
# 모듈 불러오기
from sklearn.metrics import mean_squared_error
# 성능 평가
print('RMSE : ', mean_squared_error(y_test, y_pred)**(0.5))
SST : Sum Squared Total, 전체 오차를 뜻하며 최소한 평균보다는 성능이 좋아야 모델이라 부를 수 있으므로 SST의 오차범위보다 우리의 모델 오차 범위가 더 낮아야합니다.
SST = SSE + SSR
SSE : Sum Squared Error, 수치가 낮을수록 좋은 모델이라 평가하며 내가 구한 모델과 실제값의 오차범위를 나타냅니다.
SSR : Sum Squared Regression, 수치가 클수록 좋은 모델이라 평가하며 실제값과 평균값의 오차범위를 나타냅니다.
결정계수 R2
R2 = 1이면 MSE가 0이고 모델이 데이터를 완벽하게 학습한 것을 의미합니다. 우리 모델이 평균에 비해 얼마나 설명이 잘했는지에 대해 알려주는 것입니다.(만약 0.9가 나왔다면 우리 모델이 평균의 오차보다 90% 설명을 더 잘했다는 것을 의미합니다. 90% 맞췄다를 의미하는 것이 아닙니다!)
# 모듈 불러오기
from sklearn.metrics import r2_score
# 성능 평가
print('r2 :', r2_score(y_test, y_pred))
결론적으로 회귀모델의 목적은 오차를 줄이는 것을 목표를 가지고 머신러닝을 진행합니다.
분류모델은 0인지 1인지 예측하는 모델이므로 실제 값도 0또는 1입니다. 따라서 예측 값이 실제 값과 많이 같을수록 성능이 좋은 모델이라고 평가됩니다. 즉, 정확한 예측비율이 모델 성능평가의 지표가 됩니다.
▶용어정리
정확도 : Accuracy는 정확히 예측한 값을 의미합니다.
정밀도 : Precision은 1이라 예측한 것중에 정말 1인 비율을 의미합니다
재현율 : Recall은 민감도라고도 하며 실제 1인 것을 1이라고 예측한 비율입니다.
혼동행렬
TN : 음성을 음성이라고 예측한것
FP : 음성을 양성이라고 예측한 것
FN : 양성을 음성이라고 예측한 것
TP : 양성을 양성이라고 예측한 것
F1-Score : 정밀도와 재현율의 조화평균입니다. 정밀도와 재현율이 적절하게 요구될 때 사용됩니다.
정확도 사용 예시는 아래와 같습니다.
# 모듈 불러오기
from sklearn.metrics import accuracy_score
# 성능 평가
print(accuracy_score(y_test, y_pred))
정밀도 사용 예시는 아래와 같습니다.
# 모듈 불러오기
from sklearn.metrics import precision_score
# 성능 평가
print(precision_score(y_test, y_pred, average=None))
재현율 사용 예시는 아래와 같습니다.
# 모듈 불러오기
from sklearn.metrics import recall_score
# 성능 평가
print(recall_score(y_test, y_pred, average=None))
f1-Score의 사용예시는 아래와 같습니다.
# 모듈 불러오기
from sklearn.metrics import f1_score
# 성능 평가
print(f1_score(y_test, y_pred, average=None))
분류모델의 평가인 정밀도, 재현율, 정확도를 한눈에 보는 방법은 classification_report를 사용합니다.
# 모듈 불러오기
from sklearn.metrics import classification_report
# 성능 평가
print(classification_report(y_test, y_pred))
회귀란 일반적으로 되돌아가는 회귀를 많이 생각하지만 인공지능에서의 회귀는 예측이라는 의미로 사용됩니다.
▶선형회귀
데이터는 다양한 형태를 가지기 때문에 최선의 직선을 긋기란 어렵습니다. 최선의 직선을 찾아서 직선을 그으면 해당 직선을 회귀선이라고 합니다.
최적의 회귀모델은 오차합이 최소가 되는 가중치와 편향을 찾는 것입니다.
회귀식 : y = 편향 * x + 가중치
다중회귀는 여러 독립변수가 종속변수에 영향을 미치는 선형회귀입니다.
사용방법
# 회귀계수 확인
print(model.coef_) #편향구하기
print(model.intercept_) #절편구하기
오늘은 머신러닝의 분류와 회귀에 따른 다양한 평가방법과 알고리즘에 대해 약간 공부한 하루였습니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.