Author: tdunning
Date: Sun Aug 29 05:15:21 2010
New Revision: 990491

URL: http://svn.apache.org/viewvc?rev=990491&view=rev
Log:
MAHOUT-491 - Made OnlineAuc be deterministic for tests.  Required it be moved
to core from math due to new dependency on RandomUtils.

Added:
    mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/
    mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java
      - copied, changed from r990486, 
mahout/trunk/math/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java
    mahout/trunk/core/src/test/java/org/apache/mahout/math/stats/
    
mahout/trunk/core/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java
      - copied, changed from r990486, 
mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java
Removed:
    mahout/trunk/math/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java
    
mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java
Modified:
    
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/AdaptiveLogisticRegressionTest.java

Copied: 
mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java 
(from r990486, 
mahout/trunk/math/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java)
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java&p1=mahout/trunk/math/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java&r1=990486&r2=990491&rev=990491&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java 
(original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/OnlineAuc.java 
Sun Aug 29 05:15:21 2010
@@ -41,7 +41,7 @@ public class OnlineAuc {
   public static final int HISTORY = 10;
 
   private ReplacementPolicy policy = ReplacementPolicy.FAIR;
-  private Random random = new Random();
+  private Random random = org.apache.mahout.common.RandomUtils.getRandom();
   private final Matrix scores;
   private final Vector averages;
   private final Vector samples;

Modified: 
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/AdaptiveLogisticRegressionTest.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/AdaptiveLogisticRegressionTest.java?rev=990491&r1=990490&r2=990491&view=diff
==============================================================================
--- 
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/AdaptiveLogisticRegressionTest.java
 (original)
+++ 
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/AdaptiveLogisticRegressionTest.java
 Sun Aug 29 05:15:21 2010
@@ -1,9 +1,9 @@
 package org.apache.mahout.classifier.sgd;
 
+import org.apache.mahout.common.RandomUtils;
 import org.apache.mahout.math.DenseVector;
 import org.apache.mahout.math.Vector;
 import org.apache.mahout.math.jet.random.Exponential;
-import org.apache.mahout.math.jet.random.Normal;
 import org.apache.mahout.math.jet.random.engine.MersenneTwister;
 import org.junit.Assert;
 import org.junit.Test;
@@ -15,7 +15,6 @@ public class AdaptiveLogisticRegressionT
 
     final MersenneTwister gen = new MersenneTwister(1);
     final Exponential exp = new Exponential(.5, gen);
-    Vector data = new DenseVector(200);
     Vector beta = new DenseVector(200);
     for (Vector.Element element : beta) {
         int sign = 1;
@@ -40,7 +39,6 @@ public class AdaptiveLogisticRegressionT
     AdaptiveLogisticRegression x = new AdaptiveLogisticRegression(2, 200, new 
L1());
     x.setInterval(1000);
 
-    final Normal norm = new Normal(0, 1, gen);
     for (int i = 0; i < 20000; i++) {
       AdaptiveLogisticRegression.TrainingExample r = getExample(i, gen, beta);
       x.train(r.getKey(), r.getActual(), r.getInstance());
@@ -64,15 +62,15 @@ public class AdaptiveLogisticRegressionT
     if (gen.nextDouble() < p) {
       target = 1;
     }
-    AdaptiveLogisticRegression.TrainingExample r = new 
AdaptiveLogisticRegression.TrainingExample(i, target, data);
-    return r;
+    return new AdaptiveLogisticRegression.TrainingExample(i, target, data);
   }
 
   @Test
   public void copyLearnsAsExpected() {
+    RandomUtils.useTestSeed();
+    
     final MersenneTwister gen = new MersenneTwister(1);
     final Exponential exp = new Exponential(.5, gen);
-    Vector data = new DenseVector(200);
     Vector beta = new DenseVector(200);
     for (Vector.Element element : beta) {
         int sign = 1;
@@ -96,7 +94,7 @@ public class AdaptiveLogisticRegressionT
 
     // then switch to a copy of that learner ... progress should continue
     AdaptiveLogisticRegression.Wrapper w2 = w.copy();
-    double auc2 = -1;
+    double auc2;
 
     for (int i = 0; i < 5000; i++) {
       if (i % 1000 == 0) {
@@ -106,14 +104,17 @@ public class AdaptiveLogisticRegressionT
         if (i == 1000) {
           auc2 = w2.getLearner().auc();
           Assert.assertTrue("Should have had head-start", Math.abs(auc2 - 0.5) 
> 0.1);
+          Assert.assertTrue("AUC should improve quickly on copy", auc1 < auc2);
         }
         System.out.printf("%10d %.3f\n", i, w2.getLearner().auc());
       }
       AdaptiveLogisticRegression.TrainingExample r = getExample(i, gen, beta);
       w2.train(r);
     }
-    Assert.assertTrue("AUC should improve on copy", auc1 < 
w2.getLearner().auc() - 0.1);
-    Assert.assertTrue("AUC should improve on copy", auc1 < auc2);
+    Assert.assertEquals("Original should not change after copy is updated", 
auc1, w.getLearner().auc(), 1e-5);
+
+    // this improvement is really quite lenient
+    Assert.assertTrue("AUC should improve substantially on copy", auc1 < 
w2.getLearner().auc() - 0.1);
 
     // make sure that the copy didn't lose anything
     Assert.assertEquals(auc1, w.getLearner().auc(), 0);

Copied: 
mahout/trunk/core/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java 
(from r990486, 
mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java)
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java?p2=mahout/trunk/core/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java&p1=mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineAucTest.java&r1=990486&r2=990491&rev=990491&view=diff
==============================================================================
    (empty)


Reply via email to