Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package zad2;
- import org.apache.mahout.cf.taste.common.NoSuchUserException;
- import org.apache.mahout.cf.taste.common.TasteException;
- import org.apache.mahout.cf.taste.eval.IRStatistics;
- import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
- import org.apache.mahout.cf.taste.eval.RecommenderEvaluator;
- import org.apache.mahout.cf.taste.eval.RecommenderIRStatsEvaluator;
- import org.apache.mahout.cf.taste.impl.eval.GenericRecommenderIRStatsEvaluator;
- import org.apache.mahout.cf.taste.impl.eval.RMSRecommenderEvaluator;
- 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.neighborhood.ThresholdUserNeighborhood;
- import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
- import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
- 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.RecommendedItem;
- import org.apache.mahout.cf.taste.recommender.Recommender;
- import org.apache.mahout.cf.taste.similarity.UserSimilarity;
- import org.apache.mahout.common.RandomUtils;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileWriter;
- import java.util.List;
- public class UserRecommender {
- public static final double TRAINING_PERCENTAGE = 0.35;
- public static final double EVALUATION_PERCENTAGE = 0.65;
- public static final String JESTER_RATINGS = "/home/marin/Dropbox/fax/4. godina/rovkp/dz3/jester_ratings.dat";
- public static void main(String[] args) throws Exception {
- RandomUtils.useTestSeed();
- //inicijaliziraj model učitavanjem podataka o korisnicima
- DataModel model = new FileDataModel(new File(JESTER_RATINGS), "\t+");
- RecommenderBuilder paersonCorrelationBuilder = new RecommenderBuilder() {
- @Override
- public Recommender buildRecommender(DataModel model) throws TasteException {
- UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
- UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
- return new GenericUserBasedRecommender(model, neighborhood, similarity);
- }
- };
- //nađi preporuke
- List<RecommendedItem> recommendedItems = paersonCorrelationBuilder.buildRecommender(model).recommend(22, 10);
- for (RecommendedItem recommendedItem : recommendedItems) {
- System.out.println(recommendedItem);
- }
- //evaluiraj procjenu za paerson correlation buildera
- RecommenderEvaluator recEvaluator = new RMSRecommenderEvaluator();
- double score = recEvaluator.evaluate(paersonCorrelationBuilder, null, model, TRAINING_PERCENTAGE, EVALUATION_PERCENTAGE);
- System.out.println("Paerson correlation score = " + score);
- //ispiši 10 preporuka prvih 100 korisnika na disk
- BufferedWriter writer = new BufferedWriter(new FileWriter("result.txt"));
- BufferedWriter usersWriter = new BufferedWriter(new FileWriter("users.txt"));
- for (int i = 0,userId=1; i < 100; userId++) {
- try {
- String line = userId + "\t { ";
- List<RecommendedItem> recommendations = paersonCorrelationBuilder.buildRecommender(model).recommend(userId, 10);
- for (RecommendedItem recommendedItem : recommendations) {
- line += recommendedItem.getItemID() + " : " + recommendedItem.getValue() + ", ";
- }
- line += "}";
- writer.write(line);
- writer.newLine();
- usersWriter.write(String.valueOf(userId));
- usersWriter.newLine();
- i++;
- } catch (NoSuchUserException e) {
- System.err.println("No such user with id " + userId);
- }
- }
- writer.close();
- usersWriter.close();
- //log likelihood builder
- RecommenderBuilder logLikelihoodBuilder = new RecommenderBuilder() {
- @Override
- public Recommender buildRecommender(DataModel model) throws TasteException {
- UserSimilarity similarity = new LogLikelihoodSimilarity(model);
- UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
- return new GenericUserBasedRecommender(model, neighborhood, similarity);
- }
- };
- //evaluiraj procjenu za log likelihood buildera
- RecommenderEvaluator recEvaluator2 = new RMSRecommenderEvaluator();
- double score2 = recEvaluator.evaluate(logLikelihoodBuilder, null, model, TRAINING_PERCENTAGE, EVALUATION_PERCENTAGE);
- System.out.println("Log Likelihood score = " + score2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement