일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 비전공자를 위한 데이터 분석
- michigan university deep learning for computer vision
- 서포터즈 촬영
- 데이터 분석 플랫폼
- 삼성 SDS
- Brightics EDA
- 검증 평가 지표
- 브라이틱스 AI
- paper review
- Brightics 서포터즈
- Activation Function
- Brigthics Studio
- pymysql
- 삼성 SDS 서포터즈
- 브라이틱스 스태킹
- Brightics studio
- Python
- 데이터 분석
- Brightics AI
- 파이썬 SQL 연동
- 브라이틱스 분석
- 분석 툴
- 브라이틱스 프로젝트
- 브라이틱스 서포터즈
- 머신러닝
- 범주형 변수 처리
- Deep Learning for Computer Vision
- Random Forest
- 딥러닝
- 파이썬 내장 그래프
- Today
- Total
하마가 분석하마
[machine learning class] 3. 검증 및 평가 메트릭-3 본문
코드를 통한 이해가 가장 빠를거라 생각하기에 이번 장은 코드를 깃허브 링크와 함께 티스토리에도 넣었다.
회귀 학습에서 가장 일반적인 메트릭은 오차 (error)이다. 오차는 [실제 값-예측 값]을 의미한다.
1. MAE (mean absolute error)
절대오차 (absolute error)는 오차의 절대 값이다. 평균절대오차인 MAE는 일반적인 회귀 지표로써 사용된다. 시계열 분석에서 예측 오차의 일반적인 척도이며 평균 절대 편차(MAD)의 표준 정의와 혼동하여 사용된다.
## MAE : 절대 오차의 평균
import numpy as np
def mean_absolute_error(y_true, y_pred):
# 오차를 0으로 초기화
error = 0
# 모든 샘플에 대해 오차를 계산
for yt, yp in zip(y_true, y_pred):
# 절대오차를 계산한다.
# 전체 오차에 합한다.
error += np.abs(yt - yp)
# 전체 절대오차의 평균을 구한다.
return error / len(y_true)
2. MSE (mean squared error)
제곱오차의 평균으로 회귀모델을 평가하는데 가장 많이 사용되는 메트릭이다. (실제 값-예측 값)의 제곱의 평균을 의미한다. 항상 음수가 아니며 0에 가까운 값이 좋다. 또한 분산과 편향을 모두 통합하는 지표이다.
MSE는 통계에서 가장 널리 사용되는 손실 함수 중 하나이다. 그 이유는 응용 프로그램의 실제 손실을 고려하는 것보다 수학적 편의성 때문이다.
## MSE : 제곱 오차의 평균
def mean_squared_error(y_true, y_pred):
# 오차를 0으로 초기화
error = 0
# 모든 샘플에 대해 오차를 계산
for yt, yp in zip(y_true, y_pred):
# 절대오차를 계산한다.
# 전체 오차에 합한다.
error += (yt - yp)**2
# 전체 절대오차의 평균을 구한다.
return error / len(y_true)
RMSE는 MSE에 루트를 씌운 것으로 MSE보다 평가 지표로써 많이 쓰인다. 위 MSE 코드에 루트만 씌우면 되므로 넘어가겠다.
3. MSLE (mean squared lagarithmic error)
제곱 로그 오차의 평균으로 MSE와 유사한 메트릭이다. 실제 값과 예측 값 사이의 비율 측정 값으로 해석될 수 있다. 그러므로 MSLE는 퍼센트 차이 (상대적인 차이)에만 관심을 가져 값 사이의 백분율 차이를 나타낸다. 그러므로 비율이 갖다면 큰 실제 값과 큰 예측 값, 작은 실제 값과 작은 예측 값을 동일하게 처리한다.
또한 과대 평가보다 과소 평가에 페널티를 적용하여 오차 곡선에 비대칭을 도입한다. 이러한 이유로 목표 값의 범위가 큰 경우 큰 오류가 작은 오류보다 훨씬 더 많은 페널티를 받는 것을 원하지 않을 때 MSLE를 사용한다.
## MSLE : 제곱 로그 오차의 평균
def mean_squared_log_error(y_true, y_pred):
# 오차를 0으로 초기화
error = 0
# 모든 샘플에 대해 오차를 계산
for yt, yp in zip(y_true, y_pred):
# 절대오차를 계산한다.
# 전체 오차에 합한다.
error += (np.log(1+yt) - np.log(1+yp))**2
# 전체 절대오차의 평균을 구한다.
return error / len(y_true)
4. MPE (mean percentage error) & MAPE (mean absolute percentage error)
MPE는 백분율 오차의 평균이다. MAPE는 평균 절대 백분율 오차로 정확도를 오차의 백분율로 나타낸 것이다. 예를 들어 MAPE가 5이면 예측 값은 평규 5% 벗어난다.
실제 값이 1보다 작을 때 MAPE는 크게 팽창하여 무한대에 가까운 값을 가지고 만약 실제 값이 0이라면 MAPE 값 자체를 계산할 수 없다. 이러한 경우 모형이 데이터를 잘 적합시키더라고 MAPE 값은 매우 크게 나와 모형 성능의 정확한 평가에 어려움이 있을 수 있다.
## MPE : 백분율오차의 평균
def mean_percentage_error(y_true, y_pred):
# 오차를 0으로 초기화
error = 0
# 모든 샘플에 대해 오차를 계산
for yt, yp in zip(y_true, y_pred):
# 백분율 오차를 계산하여 전체 오차에 합한다.
error += (yt - yp) / yt
# 전체 오차의 평균을 구한다.
return error / len(y_true)
## 함수 없이 메트릭을 사용하여 MAE 구하기
import numpy as np
def mae_np(y_true, y_pred):
return np.mean(np.abs(y_true - y_pred))
## MAPE : 백분율오차의 평균에 대한 절대값 버전
def mean_abs_percentage_error(y_true, y_pred):
# 오차를 0으로 초기화
error = 0
# 모든 샘플에 대해 오차를 계산
for yt, yp in zip(y_true, y_pred):
# 백분율 오차를 계산하여 전체 오차에 합한다.
error += np.abs(yt - yp) / yt
# 전체 오차의 평균을 구한다.
return error / len(y_true)
4. 결정계수
결정계수는 간단히 말해 예측 값이 실제 값을 얼마나 잘 설명하는 가를 측정한다. 1에 가까운 결정계수는 예측 값이 실제 값을 잘 설명한다는 것이고, 0에 가까운 결정계수는 그렇지 않다는 것을 나타낸다. 예측 값이 실제 값과 반대의 상관 관계를 가질 때 결정계수가 음수가 되기도 한다.
설명변수를 추가하면 할수록 결정계수가 점점 1에 가까워지기에 설명변수가 많은 경우에는 높은 결정계수를 신뢰할 수 없다는 단점이 있다. 모형의 설명력을 변수의 개수에 따라 높아지는 결정계수를 보고 정확하게 알 수 없기 때문이다.
# 결정계수
import numpy as np
def r2(y_true, y_pred):
# 타겟 값의 평균을 구한다.
mean_true_value = np.mean(y_true)
# 분자를 0으로 초기화
numerator = 0
# 분모를 0으로 초기화
denominator = 0
# 모든 샘플에 대해 분자와 분모를 업데이트 한다.
for yt, yp in zip(y_true, y_pred):
# 분자를 업데이트 한다.
numerator += (yt - yp) ** 2
# 분모를 업데이트 한다.
denominator += (yt - mean_true_value) ** 2
# 분자와 분모의 비율을 구한다.
ratio = numerator / denominator
# 1-비율을 반환한다.
return 1 - ratio
5. 고급 메트릭
1. QWK (quadratic weighted kappa)
'코헨의 카파'라고 불리는 메트릭으로 자주 사용된다. QWK는 두 평점의 동의도(agreement)를 측정한다. 평점의 실제 값은 0에서 N 사이의 임의의 실수이고 예측 값 또한 동일한 범위를 가진다. 동의도는 실제 평점과 예측 평점이 얼마나 가까운 지로 정의할 수 있다. 동의도가 높으면 QWK가 1에 가까워지고, 동의도가 낮으면 QWK가 0에 가까워진다.
타겟 변수의 평점이 범주형 변수인 다중분류 문제를 확인해 보자.
## QWK
from sklearn import metrics
y_true = [1, 2, 3, 1, 2, 3, 1, 2, 3]
y_pred = [2, 1, 2, 1, 2, 3, 3, 1, 2]
metrics.cohen_kappa_score(y_true, y_pred, weights = 'quadratic')
metrics.accuracy_score(y_true, y_pred)
0.85 이상의 QWK는 아주 좋은 점수로 볼 수 있다.
2. MCC (Matthew's Correlation Coefficient)
MCC는 -1에서 1 사이 값을 가진다. 1은 완벽한 예측, -1은 반대의 예측, 0은 랜덤한 예측을 나타낸다. 위 식에서 MCC가 TP, FP, TN, FN을 고려한 것을 볼 수 있다. 즉, 편향된 범주 분포에 사용할 수 있는 메트릭이다.
## MCC
def mcc(y_true, y_pred):
# 이진분류에서 mcc 구하기
tp = true_positive(y_true, y_pred)
tn = true_negative(y_true, y_pred)
fp = false_positive(y_true, y_pred)
fn = false_negative(y_true, y_pred)
numerator = (tp * tn) - (fp * fn)
denominator = (
(tp + fp) *
(fn + tp) *
(fp + tn) *
(tp + fn)
)
denominator = denominator**0.5
return numerator / denominator
TP, FP, TN, FN에 대한 파이썬 함수들은 이전 포스팅을 참고하면 된다.
https://github.com/rch1025/Machine-learning-class
rch1025/Machine-learning-class
Several concepts and several tips that are important for data analysis can be learned. I studied based on 'Machine Learning Master Class'. - rch1025/Machine-learning-class
github.com
'Machine learning class' 카테고리의 다른 글
[machine learning class] 5. 범주형 변수 처리-1 (0) | 2021.02.26 |
---|---|
[machine learning class] 4. 프로젝트 관리 (0) | 2021.02.23 |
[machine learning class] 3. 검증 및 평가 메트릭-2 (0) | 2021.02.20 |
[machine learning class] 3. 검증 및 평가 메트릭-1 (0) | 2021.02.17 |
[machine learning class] 2. 교차검증 (0) | 2021.02.16 |