Author: srowen
Date: Mon Mar 11 16:18:11 2013
New Revision: 1455212
URL: http://svn.apache.org/r1455212
Log:
MAHOUT-1144 fix SVD++ normalization
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDPlusPlusFactorizer.java
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDPlusPlusFactorizer.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDPlusPlusFactorizer.java?rev=1455212&r1=1455211&r2=1455212&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDPlusPlusFactorizer.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/svd/SVDPlusPlusFactorizer.java
Mon Mar 11 16:18:11 2013
@@ -22,8 +22,6 @@ import com.google.common.collect.Maps;
import org.apache.mahout.cf.taste.impl.common.FastIDSet;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.common.RandomUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.model.DataModel;
@@ -41,7 +39,6 @@ import java.util.Random;
*/
public final class SVDPlusPlusFactorizer extends RatingSGDFactorizer {
- private static final Logger log =
LoggerFactory.getLogger(SVDPlusPlusFactorizer.class);
private double[][] p;
private double[][] y;
private Map<Integer, List<Integer>> itemsByUser;
@@ -110,7 +107,7 @@ public final class SVDPlusPlusFactorizer
userVectors[userIndex][feature] += y[itemIndex][feature];
}
}
- double denominator = Math.sqrt(itemsByUser.size());
+ double denominator = Math.sqrt(itemsByUser.get(userIndex).size());
for (int feature = 0; feature < userVectors[userIndex].length;
feature++) {
userVectors[userIndex][feature] =
(float) (userVectors[userIndex][feature] / denominator +
p[userIndex][feature]);
@@ -135,7 +132,7 @@ public final class SVDPlusPlusFactorizer
pPlusY[f] += y[i2][f];
}
}
- double denominator = Math.sqrt(itemsByUser.size());
+ double denominator = Math.sqrt(itemsByUser.get(userIndex).size());
for (int feature = 0; feature < pPlusY.length; feature++) {
pPlusY[feature] = (float) (pPlusY[feature] / denominator +
p[userIndex][feature]);
}