package com.manning.hip.ch9;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
import org.apache.mahout.cf.taste.eval.RecommenderEvaluator;
import org.apache.mahout.cf.taste.impl.eval.AverageAbsoluteDifferenceRecommenderEvaluator;
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.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import java.io.File;
import java.io.IOException;
public class MovieUserEvaluator {
public static void main(String ... args) {
try {
evaluate(args[0]);
} catch (Throwable e) {
e.printStackTrace();
}
}
public static void evaluate(String ratingsFile)
throws TasteException, IOException {
DataModel model = new FileDataModel(new File(ratingsFile));
RecommenderEvaluator evaluator =
new AverageAbsoluteDifferenceRecommenderEvaluator();
RecommenderBuilder recommenderBuilder = new MyRecommendBuilder();
evaluator.evaluate(
recommenderBuilder,
null,
model,
0.95,
0.05
);
}
public static class MyRecommendBuilder implements RecommenderBuilder {
@Override
public Recommender buildRecommender(DataModel model)
throws TasteException {
UserSimilarity similarity =
new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood =
new NearestNUserNeighborhood(
100,
similarity, model);
return new GenericUserBasedRecommender(
model, neighborhood, similarity);
}
}
}