Precision과 Recall은 통계가 들어간 논문을 봤던 사람이라면 한번쯤은 봤을 개념이다. 대략적인 개념이야 어깨 넘어로 들었다고 하지만 실제로 이를 계산하려고 하면 헛갈릴 때가 많다. 그래서 정리도 한번 할 겸 이번 포스팅을 시작한다.
Precision과 Recall을 계산하기 위해선 아래 표에 대해서 알아야 한다.
(T: True, F: False, P: Positive, N: Negative)
실제 값 | 실제 값 |
|
추정 값 |
TP: 1이라고 예측 했는데 실제론 1 |
FP: 1이라고 했는데 실제론 0 |
추정 값 | FN: 0이라고 예측 했는데 실제론 1 |
TN: 0이라고 했는데 실제론 0 |
기본적으로 Precision Recall은 1 or Nothing 문제에 적합 한 것 같다. 즉 multi class 문제에는 정의하기 조금 애매해 지는 것 같다. 여튼 다시 원래 주제로 돌아오자면, Precision, Recall, Accuracy는 다음과 같이 정의된다.
'$Precision = \frac{tp}{tp+fp}$'
'$Recall = \frac{tp}{tp+fn}$'
'$Accuracy = \frac{tp+tn}{tp+tn+fp+fn}$'
이것의 물리적 의미를 살펴보면,
Precision의 경우 내가 1이라고 예측한 것(positive) 중에서 실제로 1인 것(TP)의 비율이다. 즉 내가 예측을 하긴 했는데 이게 얼마나 잘 하는지에 대한 것이다.
Recall의 경우 실제로 1인 것 중에서 내가 correct를 얼마나 했나를 나타낸다. 사실 좀 애매한 개념이긴 하다. 이 개념은 Sensitivity라고도 불린다. 즉 전체 1 중에 내가 몇개를 맞췄냐는 것이다.
Accuracy는 그런 것 없고 그냥 전체 중에서 맞게 예측한 것이 몇개를 나타낸다.
자 그럼 문제가 하나 있다. positive와 negative가 있는 문제가 아니라 그냥 label을 맞추는 문제라면?
내 생각에는 두 가지 방법이 있을 것 같다.
하나는 특정 label에 대한 precision recall을 그릴 수 있을 것 같다. 즉 여러 개의 label일 때 개별 label에 대해서 위의 계산을 다 하는 것이다. 그래서 해당 label이 맞으면 positive, 틀리면 negative로 하는 것이다.
다른 하나는 특정 label에 대해서 계산을 하고, 구한 TP, FP, FN, TN을 모두 다 더하는 것이다.
'Enginius > Machine Learning' 카테고리의 다른 글
Kernel Principal Component Analysis (KPCA) (0) | 2013.04.26 |
---|---|
Softmax activation이란? (0) | 2013.03.05 |
Distributed Gaussian Process under Localization Uncertainties (0) | 2013.01.08 |
Deep Learning Rocks. still (0) | 2012.12.13 |
Reinforcement Learning (10) | 2012.12.04 |