You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2010/01/21 23:54:45 UTC
svn commit: r901909 - in
/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn:
ConjugateGradientOptimizer.java NonNegativeQuadraticOptimizer.java
Author: srowen
Date: Thu Jan 21 22:54:45 2010
New Revision: 901909
URL: http://svn.apache.org/viewvc?rev=901909&view=rev
Log:
More small tweaks
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/ConjugateGradientOptimizer.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/NonNegativeQuadraticOptimizer.java
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/ConjugateGradientOptimizer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/ConjugateGradientOptimizer.java?rev=901909&r1=901908&r2=901909&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/ConjugateGradientOptimizer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/ConjugateGradientOptimizer.java Thu Jan 21 22:54:45 2010
@@ -76,7 +76,7 @@
w[i] = -ri;
}
- for (int iteration = MAX_ITERATIONS; iteration > 0; iteration--) {
+ for (int iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
// z = A*w;
for (int i = 0; i < k; i++) {
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/NonNegativeQuadraticOptimizer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/NonNegativeQuadraticOptimizer.java?rev=901909&r1=901908&r2=901909&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/NonNegativeQuadraticOptimizer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/knn/NonNegativeQuadraticOptimizer.java Thu Jan 21 22:54:45 2010
@@ -27,6 +27,8 @@
private static final double EPSILON = 1.0e-10;
private static final double CONVERGENCE_LIMIT = 0.1;
+ private static final int MAX_ITERATIONS = 1000;
+ private static final double DEFAULT_STEP = 0.001;
/**
* Non-negative Quadratic Optimization.
@@ -42,10 +44,9 @@
double[] x = new double[k];
Arrays.fill(x, 3.0 / (double) k);
- double rdot;
- do {
+ for (int iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
- rdot = 0.0;
+ double rdot = 0.0;
for (int n = 0; n < k; n++) {
double sumAw = 0.0;
double[] An = A[n];
@@ -66,6 +67,10 @@
r[n] = rn;
}
+ if (rdot <= CONVERGENCE_LIMIT) {
+ break;
+ }
+
// max step size denominator
double rArdotSum = 0.0;
for (int n = 0; n < k; n++) {
@@ -81,13 +86,14 @@
double stepSize = rdot / rArdotSum;
if (Double.isNaN(stepSize)) {
- stepSize = 0.001;
+ stepSize = DEFAULT_STEP;
}
// adjust step size to prevent negative values
for (int n = 0; n < k; n++) {
if (r[n] < 0.0) {
- stepSize = Math.min(Math.abs(stepSize), Math.abs(x[n] / r[n])) * stepSize / Math.abs(stepSize);
+ double absStepSize = stepSize < 0.0 ? -stepSize : stepSize;
+ stepSize = Math.min(absStepSize, Math.abs(x[n] / r[n])) * stepSize / absStepSize;
}
}
@@ -99,12 +105,8 @@
}
}
- /*
- if (rdot > (20 * k) || Double.isNaN(rdot) || (iteration > 5000)) {
- //TODO: do something in case of divergence
- }
- */
- } while (rdot > CONVERGENCE_LIMIT);
+ //TODO: do something in case of divergence
+ }
return x;
}