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/08/10 19:22:11 UTC

svn commit: r984138 - /mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/NearestNUserNeighborhood.java

Author: srowen
Date: Tue Aug 10 17:22:11 2010
New Revision: 984138

URL: http://svn.apache.org/viewvc?rev=984138&view=rev
Log:
MAHOUT-455

Modified:
    mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/NearestNUserNeighborhood.java

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/NearestNUserNeighborhood.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/NearestNUserNeighborhood.java?rev=984138&r1=984137&r2=984138&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/NearestNUserNeighborhood.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/neighborhood/NearestNUserNeighborhood.java Tue Aug 10 17:22:11 2010
@@ -36,50 +36,32 @@ public final class NearestNUserNeighborh
   private final double minSimilarity;
   
   /**
-   * @param n
-   *          neighborhood size
-   * @param userSimilarity
-   *          nearness metric
-   * @param dataModel
-   *          data model
+   * @param n neighborhood size; capped at the number of users in the data model
    * @throws IllegalArgumentException
    *           if n &lt; 1, or userSimilarity or dataModel are <code>null</code>
    */
-  public NearestNUserNeighborhood(int n, UserSimilarity userSimilarity, DataModel dataModel) {
+  public NearestNUserNeighborhood(int n, UserSimilarity userSimilarity, DataModel dataModel) throws TasteException {
     this(n, Double.NEGATIVE_INFINITY, userSimilarity, dataModel, 1.0);
   }
   
   /**
-   * @param n
-   *          neighborhood size
-   * @param minSimilarity
-   *          minimal similarity required for neighbors
-   * @param userSimilarity
-   *          nearness metric
-   * @param dataModel
-   *          data model
+   * @param n neighborhood size; capped at the number of users in the data model
+   * @param minSimilarity minimal similarity required for neighbors
    * @throws IllegalArgumentException
    *           if n &lt; 1, or userSimilarity or dataModel are <code>null</code>
    */
   public NearestNUserNeighborhood(int n,
                                   double minSimilarity,
                                   UserSimilarity userSimilarity,
-                                  DataModel dataModel) {
+                                  DataModel dataModel) throws TasteException {
     this(n, minSimilarity, userSimilarity, dataModel, 1.0);
   }
   
   /**
-   * @param n
-   *          neighborhood size
-   * @param minSimilarity
-   *          minimal similarity required for neighbors
-   * @param userSimilarity
-   *          nearness metric
-   * @param dataModel
-   *          data model
-   * @param samplingRate
-   *          percentage of users to consider when building neighborhood -- decrease to trade quality for
-   *          performance
+   * @param n neighborhood size; capped at the number of users in the data model
+   * @param minSimilarity minimal similarity required for neighbors
+   * @param samplingRate percentage of users to consider when building neighborhood -- decrease to trade quality for
+   *   performance
    * @throws IllegalArgumentException
    *           if n &lt; 1 or samplingRate is NaN or not in (0,1], or userSimilarity or dataModel are
    *           <code>null</code>
@@ -88,12 +70,13 @@ public final class NearestNUserNeighborh
                                   double minSimilarity,
                                   UserSimilarity userSimilarity,
                                   DataModel dataModel,
-                                  double samplingRate) {
+                                  double samplingRate) throws TasteException {
     super(userSimilarity, dataModel, samplingRate);
     if (n < 1) {
       throw new IllegalArgumentException("n must be at least 1");
     }
-    this.n = n;
+    int numUsers = dataModel.getNumUsers();
+    this.n = n > numUsers ? numUsers : n;
     this.minSimilarity = minSimilarity;
   }