"Mean Average Precision"의 두 판 사이의 차이

ph
이동: 둘러보기, 검색
잔글
잔글
15번째 줄: 15번째 줄:
 
AP@<i>k</i>까지 일반적으로 적용되는 식은 아니어서 그냥 모르는게 낫다.  
 
AP@<i>k</i>까지 일반적으로 적용되는 식은 아니어서 그냥 모르는게 낫다.  
  
AP@<i>k</i>는 <i>k</i>번째 query까지의 AP를 나타낸다. actual(=answer)의 길이보다 <i>k</i>가 더 큰 경우(=query의 길이가 더 긴 경우)  query에는 필연적으로 오답이 있을수밖에 없으므로, AP를 계산할 때 <i>k</i>로 나눈다. 위 그림에서 보면 마치 correct query의 개수로 나누는 듯이 보이지만, <c>min(len(actual), k)</c>로 나누는 것임에 주의한다.<ref>예를들어, 답이 \([1, 2, 3, 4, 5]\)이고 query가 \([1,6,2,7,8,3,9,10,4,5]\)일 때, AP@\(3\)을 계산하면, \(1 + 2/3\)를 \(2\)로 나누는 것이 아니고 \(3\)으로 나누는 것이다.</ref> <c>k</c>는 당연히 prediction(=query)의 길이보다 작거나 같아야 한다.
+
AP@<i>k</i>는 <i>k</i>번째 query까지의 AP를 나타낸다. actual(=answer)의 길이보다 <i>k</i>가 더 큰 경우(=query의 길이가 더 긴 경우)  query에는 필연적으로 오답이 있을수밖에 없으므로<ref>중복답안이 가능한 경우, 즉 \([1, 1, 1]\)등으로 답을 낼 수 있는 경우, 계산할 때는 처음의 \(1\)만 맞았다고 보고 계산한다. 위에 \(\Delta\text{recall}\)은 이 맥락에서 맞는 식이다.</ref>, AP를 계산할 때 <i>k</i>로 나눈다. 위 그림에서 보면 마치 correct query의 개수로 나누는 듯이 보이지만, <c>min(len(actual), k)</c>로 나누는 것임에 주의한다.<ref>예를들어, 답이 \([1, 2, 3, 4, 5]\)이고 query가 \([1,6,2,7,8,3,9,10,4,5]\)일 때, AP@\(3\)을 계산하면, \(1 + 2/3\)를 \(2\)로 나누는 것이 아니고 \(3\)으로 나누는 것이다.</ref> <c>k</c>는 당연히 prediction(=query)의 길이보다 작거나 같아야 한다.
  
 
가장 정확한 이해는 역시 코드를 보는 것인데, [https://github.com/benhamner/Metrics Ben Hamner라는 사람이 만든 테스트코드]를 보면 된다. <ref>python코드 : https://github.com/benhamner/Metrics/blob/master/Python/ml_metrics/average_precision.py </ref>
 
가장 정확한 이해는 역시 코드를 보는 것인데, [https://github.com/benhamner/Metrics Ben Hamner라는 사람이 만든 테스트코드]를 보면 된다. <ref>python코드 : https://github.com/benhamner/Metrics/blob/master/Python/ml_metrics/average_precision.py </ref>

2017년 7월 31일 (월) 14:49 판

mAP

한방에 이해가는 그림

Map eg.png

출처


말 그대로 AP의 평균이 mAP.

AP도 말 그대로 P의 Average. 단, correct query에 대해서만 계산한다. 위 그림의 Ranking #1에서 \(1 + 1/2 + 2/3 + 2/4 + 2/5 + 3/6 + \cdots\)이 아니고, \(1 + 2/3 + 3/6 + \cdots\)인 이유.

다음과 같이 나타내기도 하는데, $$\sum \text{precision} \cdot \Delta \text{recall} $$ AP@k까지 일반적으로 적용되는 식은 아니어서 그냥 모르는게 낫다.

AP@kk번째 query까지의 AP를 나타낸다. actual(=answer)의 길이보다 k가 더 큰 경우(=query의 길이가 더 긴 경우) query에는 필연적으로 오답이 있을수밖에 없으므로[1], AP를 계산할 때 k로 나눈다. 위 그림에서 보면 마치 correct query의 개수로 나누는 듯이 보이지만, min(len(actual), k)로 나누는 것임에 주의한다.[2] k는 당연히 prediction(=query)의 길이보다 작거나 같아야 한다.

가장 정확한 이해는 역시 코드를 보는 것인데, Ben Hamner라는 사람이 만든 테스트코드를 보면 된다. [3]

  1. 중복답안이 가능한 경우, 즉 \([1, 1, 1]\)등으로 답을 낼 수 있는 경우, 계산할 때는 처음의 \(1\)만 맞았다고 보고 계산한다. 위에 \(\Delta\text{recall}\)은 이 맥락에서 맞는 식이다.
  2. 예를들어, 답이 \([1, 2, 3, 4, 5]\)이고 query가 \([1,6,2,7,8,3,9,10,4,5]\)일 때, AP@\(3\)을 계산하면, \(1 + 2/3\)를 \(2\)로 나누는 것이 아니고 \(3\)으로 나누는 것이다.
  3. python코드 : https://github.com/benhamner/Metrics/blob/master/Python/ml_metrics/average_precision.py