AI/Machine Learning

[Machine Learning] 모델 성능 평가 - 분류, 회귀

byunghyun23 2022. 9. 27. 23:07

머신러닝 모델을 통해 해결해야 할 문제 종류(분류, 회귀)에 따라 성능 평가 방법이 다릅니다.

 

먼저 분류(classification) 문제의 평가 지표입니다.

1. 정확도(Accuracy)

위 식에서 I는 지시 함수(Indicator Function)으로,

y ̂_k과 y_k 값이 동일하면 1, 서로 다른 값을 가지면 0이라는 의미입니다.

 

사이킷런의 accuracy_score()를 사용해보겠습니다.

from sklearn.metrics import accuracy_score

y_pred = [1, 1, 3, 2]
y_true = [0, 1, 2, 3]

print(accuracy_score(y_true, y_pred, normalize=False))      # 1
print(accuracy_score(y_true, y_pred))                       # 0.25

파라미터 normalize는 default가 True로, 정확도를 0~1 사이로 나타냅니다.

normalize를 False로 설정할 경우 예측값과 실젯값이 일치하는 수를 나타냅니다.

 

y_pred와 y_true를 비교했을 때, 2번째 값이 서로 일치하고 나머지는 서로 다른 값을 가지고 있습니다.

따라서 normalize=False일 때, 출력이 1입니다.

또한 normalize=True일 때, 출력은 확률로 나타내어 0.25가 됩니다. (4개 중 1개 일치 -> 1/4 = 0.25)

 

 

2. F1 Score

F1 Score는 정밀도(Precision)와 리콜(Recall)의 조화 평균값입니다.

F1 Score는 0~1사이의 값을 가지며 1에 가까울수록 높은 성능을 나타내는 것이라고 볼 수 있습니다.

 

사이킷런의 classification_report()를 사용하여 여러 가지 성능 지표를 확인할 수 있습니다.

from sklearn.metrics import classification_report

y_pred = [1, 1, 3, 2]
y_true = [0, 1, 2, 3]

target_names = ['class_0', 'class_1', 'class_2', 'class_3']

print(classification_report(y_true, y_pred, target_names=target_names))

4개의 클래스(0, 1, 2, 3)으로 분류해야 하기 때문에 target_name을 class_0부터 class_3까지 지정합니다.

classification_report()의 결과로는 정밀도, 리콜, F1 Score, 정확도를 확인할 수 있습니다.

support는 class별(y_true) 데이터 개수를 의미합니다.

 

 

다음으로 회귀(Regression) 문제의 평가 지표입니다.

회귀는 정확도라는 개념을 사용할 수 없기 때문에 (몇 개의 정답을 맞혔는지) 아래와 같은 평가 지표를 사용합니다.

 

1. Mean Absolute Error(MAE)

MAE는 예측값과 실젯값의 차이의 절댓값의 평균입니다.

from sklearn.metrics import mean_absolute_error

y_pred = [5, 1.5, -1, 9]
y_true = [4.3, 2, 1, 9]

print(mean_absolute_error(y_true, y_pred))          # 0.8

( |4.3 - 5| + |2 - 1.5| + |1 -(-1)| + |9 - 9| ) / 4

= (0.7 + 0.5 + 2 + 0) / 4

= 3.2 / 4 = 0.8

 

2. Mean Squared Error(MSE)

MSE는 오차의 제곱합의 평균입니다.

from sklearn.metrics import mean_squared_error

y_pred = [5, 1.5, -1, 9]
y_true = [4.3, 2, 1, 9]

print(mean_squared_error(y_true, y_pred))          # 1.185

( (4.3 - 5)^2 + (2 - 1.5)^2 + (1 -(-1))^2 + (9 - 9)^2 ) / 4

= (0.7^2 + 0.5^2 + 2^2 + 0^2) / 4

= (0.49 + 0.25 + 4 + 0) / 4

= 4.74 / 4 = 1.185