Author: tdunning
Date: Sun Dec 12 22:40:16 2010
New Revision: 1044948

URL: http://svn.apache.org/viewvc?rev=1044948&view=rev
Log:
MAHOUT-557 - Fixed bug and added test that demonstrates how tied scores can 
cause index out of range.

Modified:
    
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
    
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/evaluation/AucTest.java

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java?rev=1044948&r1=1044947&r2=1044948&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
 Sun Dec 12 22:40:16 2010
@@ -157,18 +157,16 @@ public class Auc {
 
         // how many negatives are tied?
         int k0 = 0;
-        while (i0 < n0 && v0 == tieScore) {
+        while (i0 < n0 && scores[0].get(i0) == tieScore) {
           k0++;
           i0++;
-          v0 = scores[0].get(i0);
         }
 
         // and how many positives
         int k1 = 0;
-        while (i1 < n1 && v1 == tieScore) {
+        while (i1 < n1 && scores[1].get(i1) == tieScore) {
           k1++;
           i1++;
-          v1 = scores[1].get(i1);
         }
 
         // we found k0 + k1 tied values which have

Modified: 
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/evaluation/AucTest.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/classifier/evaluation/AucTest.java?rev=1044948&r1=1044947&r2=1044948&view=diff
==============================================================================
--- 
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/evaluation/AucTest.java
 (original)
+++ 
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/evaluation/AucTest.java
 Sun Dec 12 22:40:16 2010
@@ -39,6 +39,29 @@ public class AucTest extends MahoutTestC
   }
 
   @Test
+  public void testTies() {
+    Auc auc = new Auc();
+    Random gen = RandomUtils.getRandom();
+    auc.setProbabilityScore(false);
+    for (int i=0;i<100000;i++) {
+      auc.add(0, gen.nextGaussian());
+      auc.add(1, gen.nextGaussian() + 1);
+    }
+
+    // ties outside the normal range could cause index out of range
+    auc.add(0, 5.0);
+    auc.add(0, 5.0);
+    auc.add(0, 5.0);
+    auc.add(0, 5.0);
+
+    auc.add(1, 5.0);
+    auc.add(1, 5.0);
+    auc.add(1, 5.0);
+
+    assertEquals(0.76, auc.auc(), 0.05);
+  }
+
+  @Test
   public void testEntropy() {
     Auc auc = new Auc();
     Random gen = RandomUtils.getRandom();


Reply via email to