Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 블로그

[공학연구실습2/1주차]머신런링/딥러닝 모델 성능 분석 본문

전공 공부/공학연구실습

[공학연구실습2/1주차]머신런링/딥러닝 모델 성능 분석

토산인 2022. 11. 5. 15:55

머신러닝/립더닝 모델의 성능 분석에 필요한 용어 정리

 

1. Confusion matrix(오차 행렬)

training을 통한 모델의 예측 성능을 측정하기 위해 예측값과 실제값을 비교하기 위한 표

confusion matrix

true/false: 실제와 예측이 일치하는가?

positive/negative: 무엇으로 예측했는가?

  • TP(True Positive): 실제는 positive인데, positive로 예측 
  • FN(False Negative): 실제는 positive인데, negative로 예측
  • FP(False Positive): 실제는 negative인데, positive로 예측
  • TN(True Negative): 실제는 negative인데, negative로 예측

이 4가지 값들을 조합해 precision, recall 값을 계산한다. 

 

 

2. accuracy(정확도)

모델이 바르게 분류한 비율 (정답 비율)

 

 

3. precision(정밀도)

모델이 positive로 예측한 것 중 실제값이 positive인 비율

    ex) yes라 예측할 때, 얼마나 정확한가?를 측정

 

 

4. recall(재현도)

실제값이 positive인 것 중 모델이 positive라 분류한 비율

 

 

5. F1 score

precision와 recall의 조화평균으로, 두 가지 지표를 균형 있게 반영하는 지표이다.

 

 

accuracy가 아닌 F1 score를 쓰는 경우는 데이터가 불균형할 때이다.

데이터가 불균형할 때 accuracy로 모델을 평가하면 올바르게 측정하기 힘들지만 F1 score로 모델을 평가하면 비교적 정확하게 측정할 수 있다. 

 

참고

https://leedakyeong.tistory.com/entry/%EB%B6%84%EB%A5%98-%EB%AA%A8%EB%8D%B8-%EC%84%B1%EB%8A%A5-%ED%8F%89%EA%B0%80-%EC%A7%80%ED%91%9C-Confusion-Matrix%EB%9E%80-%EC%A0%95%ED%99%95%EB%8F%84Accuracy-%EC%A0%95%EB%B0%80%EB%8F%84Precision-%EC%9E%AC%ED%98%84%EB%8F%84Recall-F1-Score

 

 

 

 


 

저번 시간에 진행했던 ANN와 CNN 모델의 결과를 바탕으로 성능 분석 지표에 따라 두 모델의 성능을 비교해보자.

 

 

from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score

y_pred=model.predict(x_test)
y_pred=np.argmax(y_pred, axis=1)
y_test=np.argmax(y_test, axis=1)

ann_ConfusionMatrix=confusion_matrix(y_test, y_pred)
print(ann_ConfusionMatrix)

 

  • 먼저 predict 함수로 x_test 데이터를 이용해 모델을 예측한다.

 

  • 그리고 argmax 함수를 사용해 데이터 형식을 바꿔준다. 이때 argmax 함수란 input 집합 중에서 가장 큰 값의 index를 output으로 내보내는 함수이다. 즉 예측한 데이터 중에서 가장 큰 값의 index를 output으로 꺼낸다.

 

argmax 함수를 사용해 one hot 코딩

 

  • 그리고 예측값과 실제값으로 confusion_matrix 함수를 이용해 confusion matrix를 출력한다. 

 

 

결과

ANN의 confusion matirx

결과의 confusion matrix의 행이 실제값이고 열은 예측값이다. (0, 0)에 위치한 것이 의미하는 것은 실제 0인데 0으로 예측한 데이터 양(1)을 말한다. (0, 1)에 위치한 것은 실제값이 0인데 모델이 1로 예측을 한 데이터를 말한다. 그리고 (5, 8)은 실제값이 8인데 5로 예측한 데이터를 말한다. 

 

 

p = precision_score(y_test, y_pred, average=None)
r = recall_score(y_test, y_pred, average=None)
f1 = f1_score(y_test, y_pred, average=None)

print("precision_score: ", p)
print("recall_score: ", r)
print("f1_score: ", f1)

그리고 precision, recall, f1 score를 출력한다.

 

 

결과

ANN의 성능 지표

 

 

 

이와 동일하게 CNN 모델의 confusion matrix를 출력한다.

 

from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score

y_pred=model.predict(x_test)
y_pred=np.argmax(y_pred, axis=1)
y_test=np.argmax(y_test, axis=1)

cnn_ConfusionMatrix=confusion_matrix(y_test, y_pred)
print(cnn_ConfusionMatrix)

 

 

결과

ANN의 confusion matirx

확실히 ANN보다 CNN 모델의 예측이 정확하다. 하지만 아직 이 데이터만으로는 ANN 모델과 CNN 모델의 성능을 비교하긴 어려워 보인다.

 

 

CNN 모델의 여러 성능 지표를 출력한다. 

p = precision_score(y_test, y_pred, average=None)
r = recall_score(y_test, y_pred, average=None)
f1 = f1_score(y_test, y_pred, average=None)

print("precision_score: ", p)
print("recall_score: ", r)
print("f1_score: ", f1)

 

 

결과

CNN의 성능 지표

vs

ANN의 성능 지표

 

이를 토대로 ANN과 CNN을 비교하면 ANN보다 CNN의 성능 지표들이 더 좋은 결과를 가진다.

따라서 CNN이 더 좋은 성능을 가진다고 볼 수 있다.