머신러닝 모델을 통해 해결해야 할 문제 종류(분류, 회귀)에 따라 성능 평가 방법이 다릅니다.
먼저 분류(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
'AI > Machine Learning' 카테고리의 다른 글
[Machine Learning] 선형 회귀 (Linear Regression) (0) | 2022.09.28 |
---|---|
[Machine Learning] K-최근접 이웃 알고리즘 (KNN) (0) | 2022.09.28 |
[Machine Learning] 오차 행렬 (Confusion Matrix) (0) | 2022.09.27 |
[Machine Learning] 손실 함수 - 비용 함수, 목적 함수 (0) | 2022.09.27 |
[Machine Learning] 그리드 서치 (0) | 2022.09.13 |