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)