Tuesday 15 September 2015

Mahout: NearestNUserNeighborhood

Computes a neighborhood consisting of the nearest n users to a given user. "nearest" is defined by UserSimilarity you used.

NearestNUserNeighborhood class provides following constructors to construct NearestNUserNeighborhood object.

NearestNUserNeighborhood(int n, double minSimilarity, UserSimilarity userSimilarity, DataModel dataModel)
          
NearestNUserNeighborhood(int n, double minSimilarity, UserSimilarity userSimilarity, DataModel dataModel, double samplingRate)
           
NearestNUserNeighborhood(int n, UserSimilarity userSimilarity, DataModel dataModel)

n: Neighborhood size
minSimilarity : minimal similarity required for neighbors
userSimilarity: UserSimilarity instance
DataModel : Input data
samplingRate - percentage of users to consider when building neighborhood.

Following example shows usage of NearestNUserNeighborhood.

Let’s say I had following data.


customers.csv

1,1,3
1,2,1
1,4,5
1,5,3
1,9,3
1,10,2
2,1,2
2,3,2
2,4,1
2,7,5
3,1,5
3,2,1
3,3,1
3,6,1
3,8,1
4,1,1
4,2,1
4,6,3
4,7,1
4,9,2
5,2,1
5,3,3
5,6,5
5,10,3
6,1,1
6,2,4
6,3,4
6,7,2
6,8,3
7,1,3
7,2,3
7,3,1
7,5,3
7,6,3
7,7,3
8,1,1
8,3,3
8,4,5
8,8,1
8,9,2
9,4,2
9,6,5
9,8,3
9,9,3
10,2,5
10,3,1
10,4,2
10,5,1
10,9,4
11,2,3
11,4,2
11,5,2
11,8,1
12,1,1
12,3,4
12,7,3
12,8,2
13,1,3
13,2,4
13,3,2
13,5,3
13,9,3
14,2,3
14,3,2
14,5,1
14,7,1
14,8,5
14,9,2
15,1,3
15,2,2
15,3,2
15,6,5
15,7,1
15,9,3
16,2,2
16,3,4
16,6,1
16,7,3
16,10,1
17,3,1
17,4,3
17,7,4
17,8,4
18,3,3
18,5,2
18,6,3
18,9,1
18,10,2
19,1,1
19,2,5
19,6,2
19,7,2
19,8,3
19,10,3
20,1,2
20,2,2
20,3,1
20,4,4
20,8,1


20,8,1 means user 20 bought item 8 and rated 1

import java.io.File;
import java.io.IOException;

import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;

public class NearestNUserNeighborhoodEx {
 public static String dataFile = "/Users/harikrishna_gurram/customer.csv";
 private static final int NEIGHBORHOOD_SIZE = 5;

 public static void main(String args[]) throws IOException, TasteException {

  DataModel model = new FileDataModel(new File(dataFile));

  EuclideanDistanceSimilarity similarity = new EuclideanDistanceSimilarity(
    model);

  UserNeighborhood neighborhood = new NearestNUserNeighborhood(
    NEIGHBORHOOD_SIZE, similarity, model);

  long[] neighbors = neighborhood.getUserNeighborhood(1);
  System.out.println("Neighbors for user 1 are");
  for (long user : neighbors) {
   System.out.print(user + " ");
  }
 }
}


Output
Neighbors for user 1 are
15 5 16 20 7




Prevoius                                                 Next                                                 Home

No comments:

Post a Comment