List of usage examples for org.apache.mahout.cf.taste.impl.common FastIDSet FastIDSet
public FastIDSet()
From source file:CandidateItemsStrategyCustom.java
@Override public FastIDSet getCandidateItems(long l, PreferenceArray preferencesFromUser, DataModel dm, boolean bln) throws TasteException { List<Long> specificlItemIDs = new ArrayList<>(); FastIDSet candidateItemIDs = new FastIDSet(); for (long itemID : specificlItemIDs) { candidateItemIDs.add(itemID);//from w ww .j a va2 s .c o m } for (int j = 0; j < preferencesFromUser.length(); j++) { candidateItemIDs.remove(preferencesFromUser.getItemID(j)); } return candidateItemIDs; }
From source file:com.buddycloud.channeldirectory.search.handler.common.mahout.ChannelRecommender.java
License:Apache License
private int getPreferenceCount(long theUserId) throws TasteException { FastIDSet possibleItemIDs = new FastIDSet(); long[] theNeighborhood = userNeighborhood.getUserNeighborhood(theUserId); DataModel dataModel = recommenderDataModel.getDataModel(); for (long userID : theNeighborhood) { possibleItemIDs.addAll(dataModel.getItemIDsFromUser(userID)); }/* w ww. j a va2 s . c om*/ possibleItemIDs.removeAll(dataModel.getItemIDsFromUser(theUserId)); return possibleItemIDs.size(); }
From source file:com.msiiplab.recsys.implicit.TanimotoIDF2CoefficientSimilarity.java
License:Apache License
private FastIDSet toUserFastIDSet(PreferenceArray array) { FastIDSet fastIDSet = new FastIDSet(); for (Preference preference : array) { fastIDSet.add(preference.getUserID()); }//from ww w.j a v a2 s.co m return fastIDSet; }
From source file:com.msiiplab.recsys.rwr.GLRecommenderIRStatsEvaluator.java
License:Apache License
public void predict(RecommenderBuilder recommenderBuilder, List<DataModel> trainingDataModels, List<DataModel> testingDataModels, List<File> outputFileList) throws TasteException { // num of train/test pair: num of cross validation folds int numFolds = trainingDataModels.size(); for (int i_folds = 0; i_folds < numFolds; i_folds++) { DataModel trainDataModel = trainingDataModels.get(i_folds); DataModel testDataModel = testingDataModels.get(i_folds); // Build recommender Recommender recommender = recommenderBuilder.buildRecommender(trainDataModel); LongPrimitiveIterator it_item;/*from w w w . j a va 2 s. co m*/ FastIDSet allItems = new FastIDSet(); it_item = trainDataModel.getItemIDs(); while (it_item.hasNext()) { allItems.add(it_item.nextLong()); } it_item = testDataModel.getItemIDs(); while (it_item.hasNext()) { allItems.add(it_item.nextLong()); } if (outputFileList != null) { File file = outputFileList.get(i_folds); log.info("Writing recommender output to file: " + file.getPath()); try { FileOutputStream out = new FileOutputStream(file); LongPrimitiveIterator it_user = testDataModel.getUserIDs(); while (it_user.hasNext()) { long userID = it_user.nextLong(); FastIDSet ratedItems = trainDataModel.getItemIDsFromUser(userID); StringBuilder sb = new StringBuilder(); Iterator<Long> it = allItems.iterator(); while (it.hasNext()) { long itemID = it.next(); if (!ratedItems.contains(itemID)) { float pref = 0; try { pref = recommender.estimatePreference(userID, itemID); } catch (NoSuchItemException e) { pref = Float.NaN; } sb.append(userID + "," + itemID + "," + pref + "\n"); } } out.write(sb.toString().getBytes()); out.flush(); } out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
From source file:com.msiiplab.recsys.rwr.GLRecommenderIRStatsEvaluator.java
License:Apache License
public GLIRStatisticsImpl evaluate(RecommenderBuilder recommenderBuilder, List<DataModel> trainingDataModels, List<DataModel> testingDataModels, IDRescorer rescorer, int at, double relevanceThreshold, double evaluationPercentage) throws TasteException { Preconditions.checkArgument(recommenderBuilder != null, "recommenderBuilder is null"); Preconditions.checkArgument(trainingDataModels != null, "trainingDataModels is null"); Preconditions.checkArgument(testingDataModels != null, "testingDataModels is null"); Preconditions.checkArgument(testingDataModels.size() == trainingDataModels.size(), "trainingDataModels.size must equals testingDataModels.size"); Preconditions.checkArgument(at >= 1, "at must be at least 1"); Preconditions.checkArgument(evaluationPercentage > 0.0 && evaluationPercentage <= 1.0, "Invalid evaluationPercentage: %s", evaluationPercentage); // num of train/test pair: num of cross validation folds int numFolds = trainingDataModels.size(); RunningAverage CrossValidationPrecision = new GLRunningAverage(); RunningAverage CrossValidationRPrecision = new GLRunningAverage(); RunningAverage CrossValidationRecall = new GLRunningAverage(); RunningAverage CrossValidationFallOut = new GLRunningAverage(); RunningAverage CrossValidationNDCG = new GLRunningAverage(); RunningAverage CrossValidationRNDCG = new GLRunningAverage();//rating-nDCG RunningAverage CrossValidationReach = new GLRunningAverage(); RunningAverage CrossValidationMacroDOA = new GLRunningAverage(); RunningAverage CrossValidationMicroDOA = new GLRunningAverage(); RunningAverage CrossValidationMacroInnerDOA = new GLRunningAverage(); RunningAverage CrossValidationMicroInnerDOA = new GLRunningAverage(); for (int i_folds = 0; i_folds < numFolds; i_folds++) { log.info("fold {}", i_folds); DataModel trainDataModel = trainingDataModels.get(i_folds); DataModel testDataModel = testingDataModels.get(i_folds); FastIDSet MovieIDs = new FastIDSet(); LongPrimitiveIterator it_train_temp = trainDataModel.getItemIDs(); LongPrimitiveIterator it_test_temp = testDataModel.getItemIDs(); while (it_train_temp.hasNext()) { MovieIDs.add(it_train_temp.nextLong()); }// www . j a va 2 s . com while (it_test_temp.hasNext()) { MovieIDs.add(it_test_temp.nextLong()); } int numTrainItems = trainDataModel.getNumItems(); int numTestItems = testDataModel.getNumItems(); int numItems = numTestItems + numTrainItems; RunningAverage precision = new GLRunningAverage(); RunningAverage rPrecision = new GLRunningAverage(); RunningAverage recall = new GLRunningAverage(); RunningAverage fallOut = new GLRunningAverage(); RunningAverage nDCG = new GLRunningAverage(); RunningAverage rNDCG = new GLRunningAverage(); RunningAverage macroDOA = new GLRunningAverage(); RunningAverage microDOA1 = new GLRunningAverage(); RunningAverage microDOA2 = new GLRunningAverage(); RunningAverage macroInnerDOA = new GLRunningAverage(); RunningAverage microInnerDOA1 = new GLRunningAverage(); RunningAverage microInnerDOA2 = new GLRunningAverage(); int numUsersRecommendedFor = 0; int numUsersWithRecommendations = 0; long start = System.currentTimeMillis(); // Build recommender Recommender recommender = recommenderBuilder.buildRecommender(trainDataModel); LongPrimitiveIterator it_user = testDataModel.getUserIDs(); while (it_user.hasNext()) { long userID = it_user.nextLong(); log.info("user {}", userID); // Use all in testDataModel as relevant FastIDSet learnedItemIDs; FastIDSet relevantItemIDs; try { learnedItemIDs = trainDataModel.getItemIDsFromUser(userID); relevantItemIDs = testDataModel.getItemIDsFromUser(userID); } catch (NoSuchUserException e1) { continue; } // We excluded zero relevant items situation int numRelevantItems = relevantItemIDs.size(); if (numRelevantItems <= 0) { continue; } // We excluded all prefs for the user that has no pref record in // training set try { trainDataModel.getPreferencesFromUser(userID); } catch (NoSuchUserException nsee) { continue; // Oops we excluded all prefs for the user -- just // move on } // Recommend items List<RecommendedItem> recommendedItems = recommender.recommend(userID, at, rescorer); List<RecommendedItem> recommendedItemsAtRelNum = recommender.recommend(userID, numRelevantItems, rescorer); PreferenceArray userPreferences = testDataModel.getPreferencesFromUser(userID); FastByIDMap<Preference> userPreferenceMap = getPrefereceMap(userPreferences); userPreferences.sortByValueReversed(); // relevantItemIDsAtN only consider top N items as relevant items FastIDSet relevantItemIDsAtN = new FastIDSet(); Iterator<Preference> it_pref = userPreferences.iterator(); int num_pref = 0; while (it_pref.hasNext()) { relevantItemIDsAtN.add(it_pref.next().getItemID()); num_pref++; if (num_pref >= at) { break; } } // Compute intersection between recommended items and relevant // items int intersectionSize = 0; int numRecommendedItems = recommendedItems.size(); for (RecommendedItem recommendedItem : recommendedItems) { if (relevantItemIDs.contains(recommendedItem.getItemID())) { intersectionSize++; } } // Precision double prec = 0; if (numRecommendedItems > 0) { prec = (double) intersectionSize / (double) numRecommendedItems; } precision.addDatum(prec); log.info("Precision for user {} is {}", userID, prec); // Recall double rec = (double) intersectionSize / (double) numRelevantItems; recall.addDatum(rec); log.info("Recall for user {} is {}", userID, rec); // R-precision double rprec = 0; int intersectionSizeAtRelNum = 0; int numRecommendedItemsAtRelNum = recommendedItemsAtRelNum.size(); for (RecommendedItem recommendedItem : recommendedItemsAtRelNum) { if (relevantItemIDs.contains(recommendedItem.getItemID())) { intersectionSizeAtRelNum++; } } if (numRecommendedItemsAtRelNum > 0) { rprec = (double) intersectionSizeAtRelNum / (double) numRelevantItems; } rPrecision.addDatum(rprec); log.info("RPrecision for user {} is {}", userID, rprec); double F1 = 0; if (prec + rec > 0) { F1 = 2 * prec * rec / (prec + rec); } log.info("F1 for user {} is {}", userID, F1); // Fall-out double fall = 0; int size = numRelevantItems + trainDataModel.getItemIDsFromUser(userID).size(); if (numRelevantItems < size) { fall = (double) (numRecommendedItems - intersectionSize) / (double) (numItems - numRelevantItems); } fallOut.addDatum(fall); log.info("Fallout for user {} is {}", userID, fall); // nDCG // In computing, assume relevant IDs have relevance ${rating} and others // 0 PreferenceArray userPredictions = getPreferenceArray(recommendedItems, userID); double userNDCG = computeNDCG(userPreferences, userPredictions, relevantItemIDs, userPreferenceMap, at); double userRNDCG = computeRNDCG(userPreferences, userPredictions, relevantItemIDs, userPreferenceMap, at); nDCG.addDatum(userNDCG); rNDCG.addDatum(userRNDCG); log.info("NDCG for user {} is {}", userID, userNDCG); log.info("RNDCG for user {} is {}", userID, userRNDCG); // Reach numUsersRecommendedFor++; if (numRecommendedItems > 0) { numUsersWithRecommendations++; } // DOA // [Siegel and Castellan, 1988] and [Gori and Pucci, 2007] // LongPrimitiveIterator it_movies = MovieIDs.iterator(); LongPrimitiveIterator it_movies = trainDataModel.getItemIDs(); long numNW = 0; long sumCheckOrder = 0; while (it_movies.hasNext()) { long itemID = it_movies.nextLong(); if (!learnedItemIDs.contains(itemID) && !relevantItemIDs.contains(itemID)) { // itemID is in NW_{u_i} numNW++; LongPrimitiveIterator it_test = relevantItemIDs.iterator(); while (it_test.hasNext()) { long testItemID = it_test.nextLong(); float itemPref = 0; float testItemPref = 0; try { itemPref = recommender.estimatePreference(userID, itemID); } catch (NoSuchItemException e) { } try { testItemPref = recommender.estimatePreference(userID, testItemID); } catch (NoSuchItemException e) { } if (itemPref <= testItemPref) { sumCheckOrder++; } } } } if (numNW > 0 && relevantItemIDs.size() > 0) { macroDOA.addDatum((double) sumCheckOrder / (double) (relevantItemIDs.size() * numNW)); microDOA1.addDatum((double) sumCheckOrder); microDOA2.addDatum((double) (relevantItemIDs.size() * numNW)); } // log.info( // "sumCheckOrder / (numNW * numRelevant) = {} / ({} * {})", // sumCheckOrder, numNW, relevantItemIDs.size()); // InnerDOA: only check the agreement of order in test set LongPrimitiveIterator it_test1 = relevantItemIDs.iterator(); long sumCheckInnerOrder = 0; long sumAll = 0; while (it_test1.hasNext()) { long itemID1 = it_test1.nextLong(); LongPrimitiveIterator it_test2 = relevantItemIDs.iterator(); while (it_test2.hasNext()) { long itemID2 = it_test2.nextLong(); if (itemID1 != itemID2) { try { float pref_v1 = testDataModel.getPreferenceValue(userID, itemID1); float pref_v2 = testDataModel.getPreferenceValue(userID, itemID2); float predict_v1 = recommender.estimatePreference(userID, itemID1); float predict_v2 = recommender.estimatePreference(userID, itemID2); if ((pref_v1 >= pref_v2 && predict_v1 >= predict_v2) || (pref_v1 <= pref_v2 && predict_v1 <= predict_v2)) { sumCheckInnerOrder++; } sumAll++; } catch (NoSuchItemException e) { // do nothing, just ignore } } } } if (relevantItemIDs.size() > 1) { macroInnerDOA.addDatum((double) sumCheckInnerOrder / (double) sumAll); microInnerDOA1.addDatum((double) sumCheckInnerOrder); microInnerDOA2.addDatum((double) sumAll); } // log.info( // "sumCheckInnerOrder / (|T| * (|T|-1) ) = {} / ({} * {}) = ", // sumCheckInnerOrder, relevantItemIDs.size(), relevantItemIDs.size()-1); } long end = System.currentTimeMillis(); CrossValidationPrecision.addDatum(precision.getAverage()); CrossValidationRPrecision.addDatum(rPrecision.getAverage()); CrossValidationRecall.addDatum(recall.getAverage()); CrossValidationFallOut.addDatum(fallOut.getAverage()); CrossValidationNDCG.addDatum(nDCG.getAverage()); CrossValidationRNDCG.addDatum(rNDCG.getAverage()); CrossValidationReach.addDatum((double) numUsersWithRecommendations / (double) numUsersRecommendedFor); CrossValidationMacroDOA.addDatum(macroDOA.getAverage()); CrossValidationMicroDOA.addDatum(microDOA1.getAverage() / microDOA2.getAverage()); CrossValidationMacroInnerDOA.addDatum(macroInnerDOA.getAverage()); CrossValidationMicroInnerDOA.addDatum(microInnerDOA1.getAverage() / microInnerDOA2.getAverage()); log.info("Evaluated with training/testing set # {} in {}ms", i_folds, end - start); System.out.printf("Evaluated with training/testing set # %d in %d ms \n", i_folds, end - start); log.info( "Precision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA/macroInnerDOA/microInnerDOA: {} / {} / {} / {} / {} / {} / {} / {} / {} / {} / {}", precision.getAverage(), rPrecision.getAverage(), recall.getAverage(), fallOut.getAverage(), nDCG.getAverage(), rNDCG.getAverage(), (double) numUsersWithRecommendations / (double) numUsersRecommendedFor, macroDOA.getAverage(), microDOA1.getAverage() / microDOA2.getAverage(), macroInnerDOA.getAverage(), microInnerDOA1.getAverage() / microInnerDOA2.getAverage()); System.out.printf( "Precision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA/macroInnerDOA/microInnerDOA: %f / %f / %f / %f / %f / %f / %f / %f / %f / %f / %f \n", precision.getAverage(), rPrecision.getAverage(), recall.getAverage(), fallOut.getAverage(), nDCG.getAverage(), rNDCG.getAverage(), (double) numUsersWithRecommendations / (double) numUsersRecommendedFor, macroDOA.getAverage(), microDOA1.getAverage() / microDOA2.getAverage(), macroInnerDOA.getAverage(), microInnerDOA1.getAverage() / microInnerDOA2.getAverage()); } log.info( "Cross Validation Precision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA: {} / {} / {} / {} / {} / {} / {} / {} / {} / {} / {}", CrossValidationPrecision.getAverage(), CrossValidationRPrecision.getAverage(), CrossValidationRecall.getAverage(), CrossValidationFallOut.getAverage(), CrossValidationNDCG.getAverage(), CrossValidationRNDCG.getAverage(), CrossValidationReach.getAverage(), CrossValidationMacroDOA.getAverage(), CrossValidationMicroDOA.getAverage(), CrossValidationMacroInnerDOA.getAverage(), CrossValidationMicroInnerDOA.getAverage()); System.out.printf( "Cross Validation: \nPrecision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA: %f / %f / %f / %f / %f / %f / %f / %f / %f / %f / %f\n", CrossValidationPrecision.getAverage(), CrossValidationRPrecision.getAverage(), CrossValidationRecall.getAverage(), CrossValidationFallOut.getAverage(), CrossValidationNDCG.getAverage(), CrossValidationRNDCG.getAverage(), CrossValidationReach.getAverage(), CrossValidationMacroDOA.getAverage(), CrossValidationMicroDOA.getAverage(), CrossValidationMacroInnerDOA.getAverage(), CrossValidationMicroInnerDOA.getAverage()); return new GLIRStatisticsImpl(CrossValidationPrecision.getAverage(), CrossValidationRPrecision.getAverage(), CrossValidationRecall.getAverage(), CrossValidationFallOut.getAverage(), CrossValidationNDCG.getAverage(), CrossValidationRNDCG.getAverage(), CrossValidationReach.getAverage(), CrossValidationMacroDOA.getAverage(), CrossValidationMicroDOA.getAverage(), CrossValidationMacroInnerDOA.getAverage(), CrossValidationMicroInnerDOA.getAverage()); }
From source file:com.msiiplab.recsys.rwr.ParallelGLRecommenderIRStatsEvaluator.java
License:Apache License
@Override public GLIRStatisticsImpl evaluate(RecommenderBuilder recommenderBuilder, List<DataModel> trainingDataModels, List<DataModel> testingDataModels, IDRescorer rescorer, int at, double relevanceThreshold, double evaluationPercentage) throws TasteException { Preconditions.checkArgument(recommenderBuilder != null, "recommenderBuilder is null"); Preconditions.checkArgument(trainingDataModels != null, "trainingDataModels is null"); Preconditions.checkArgument(testingDataModels != null, "testingDataModels is null"); Preconditions.checkArgument(testingDataModels.size() == trainingDataModels.size(), "trainingDataModels.size must equals testingDataModels.size"); Preconditions.checkArgument(at >= 1, "at must be at least 1"); Preconditions.checkArgument(evaluationPercentage > 0.0 && evaluationPercentage <= 1.0, "Invalid evaluationPercentage: %s", evaluationPercentage); // num of train/test pair: num of cross validation folds int numFolds = trainingDataModels.size(); RunningAverage CrossValidationPrecision = new GLRunningAverage(); RunningAverage CrossValidationRPrecision = new GLRunningAverage(); RunningAverage CrossValidationRecall = new GLRunningAverage(); RunningAverage CrossValidationFallOut = new GLRunningAverage(); RunningAverage CrossValidationNDCG = new GLRunningAverage(); RunningAverage CrossValidationRNDCG = new GLRunningAverage();//rating-nDCG RunningAverage CrossValidationReach = new GLRunningAverage(); RunningAverage CrossValidationMacroDOA = new GLRunningAverage(); RunningAverage CrossValidationMicroDOA = new GLRunningAverage(); RunningAverage CrossValidationMacroInnerDOA = new GLRunningAverage(); RunningAverage CrossValidationMicroInnerDOA = new GLRunningAverage(); for (int i_folds = 0; i_folds < numFolds; i_folds++) { log.info("fold {}", i_folds); DataModel trainDataModel = trainingDataModels.get(i_folds); DataModel testDataModel = testingDataModels.get(i_folds); FastIDSet MovieIDs = new FastIDSet(); LongPrimitiveIterator it_train_temp = trainDataModel.getItemIDs(); LongPrimitiveIterator it_test_temp = testDataModel.getItemIDs(); while (it_train_temp.hasNext()) { MovieIDs.add(it_train_temp.nextLong()); }// www . j a va2s . c o m while (it_test_temp.hasNext()) { MovieIDs.add(it_test_temp.nextLong()); } int numTrainItems = trainDataModel.getNumItems(); int numTestItems = testDataModel.getNumItems(); int numItems = numTestItems + numTrainItems; RunningAverage precision = new GLRunningAverage(); RunningAverage rPrecision = new GLRunningAverage(); RunningAverage recall = new GLRunningAverage(); RunningAverage fallOut = new GLRunningAverage(); RunningAverage nDCG = new GLRunningAverage(); RunningAverage rNDCG = new GLRunningAverage(); RunningAverage macroDOA = new GLRunningAverage(); RunningAverage microDOA1 = new GLRunningAverage(); RunningAverage microDOA2 = new GLRunningAverage(); RunningAverage macroInnerDOA = new GLRunningAverage(); RunningAverage microInnerDOA1 = new GLRunningAverage(); RunningAverage microInnerDOA2 = new GLRunningAverage(); int numUsersRecommendedFor = 0; int numUsersWithRecommendations = 0; long start = System.currentTimeMillis(); // Build recommender Recommender recommender = recommenderBuilder.buildRecommender(trainDataModel); // Futures ArrayList<Future<Integer>> futureList = new ArrayList<Future<Integer>>(); int N_CPUS = Runtime.getRuntime().availableProcessors(); ExecutorService pool = Executors.newFixedThreadPool(N_CPUS - 1); // ExecutorService pool = Executors.newFixedThreadPool(1); LongPrimitiveIterator it_user = testDataModel.getUserIDs(); while (it_user.hasNext()) { long userID = it_user.nextLong(); Future<Integer> future = pool.submit(new Eval(precision, rPrecision, recall, fallOut, nDCG, rNDCG, macroDOA, microDOA1, microDOA2, macroInnerDOA, microInnerDOA1, microInnerDOA2, trainDataModel, testDataModel, userID, recommender, at, rescorer, numItems)); futureList.add(future); } for (Future<Integer> future : futureList) { numUsersRecommendedFor++; try { if (future.get() == 1) { numUsersWithRecommendations++; } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); e.getCause().printStackTrace(); System.exit(1); } } pool.shutdown(); long end = System.currentTimeMillis(); CrossValidationPrecision.addDatum(precision.getAverage()); CrossValidationRPrecision.addDatum(rPrecision.getAverage()); CrossValidationRecall.addDatum(recall.getAverage()); CrossValidationFallOut.addDatum(fallOut.getAverage()); CrossValidationNDCG.addDatum(nDCG.getAverage()); CrossValidationRNDCG.addDatum(rNDCG.getAverage()); CrossValidationReach.addDatum((double) numUsersWithRecommendations / (double) numUsersRecommendedFor); CrossValidationMacroDOA.addDatum(macroDOA.getAverage()); CrossValidationMicroDOA.addDatum(microDOA1.getAverage() / microDOA2.getAverage()); CrossValidationMacroInnerDOA.addDatum(macroInnerDOA.getAverage()); CrossValidationMicroInnerDOA.addDatum(microInnerDOA1.getAverage() / microInnerDOA2.getAverage()); log.info("Evaluated with training/testing set # {} in {}ms", i_folds, end - start); System.out.printf("Evaluated with training/testing set # %d in %d ms \n", i_folds, end - start); log.info( "Precision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA/macroInnerDOA/microInnerDOA: {} / {} / {} / {} / {} / {} / {} / {} / {} / {} / {}", precision.getAverage(), rPrecision.getAverage(), recall.getAverage(), fallOut.getAverage(), nDCG.getAverage(), rNDCG.getAverage(), (double) numUsersWithRecommendations / (double) numUsersRecommendedFor, macroDOA.getAverage(), microDOA1.getAverage() / microDOA2.getAverage(), macroInnerDOA.getAverage(), microInnerDOA1.getAverage() / microInnerDOA2.getAverage()); System.out.printf( "Precision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA/macroInnerDOA/microInnerDOA: %f / %f / %f / %f / %f / %f / %f / %f / %f / %f / %f \n", precision.getAverage(), rPrecision.getAverage(), recall.getAverage(), fallOut.getAverage(), nDCG.getAverage(), rNDCG.getAverage(), (double) numUsersWithRecommendations / (double) numUsersRecommendedFor, macroDOA.getAverage(), microDOA1.getAverage() / microDOA2.getAverage(), macroInnerDOA.getAverage(), microInnerDOA1.getAverage() / microInnerDOA2.getAverage()); } log.info( "Cross Validation Precision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA: {} / {} / {} / {} / {} / {} / {} / {} / {} / {} / {}", CrossValidationPrecision.getAverage(), CrossValidationRPrecision.getAverage(), CrossValidationRecall.getAverage(), CrossValidationFallOut.getAverage(), CrossValidationNDCG.getAverage(), CrossValidationRNDCG.getAverage(), CrossValidationReach.getAverage(), CrossValidationMacroDOA.getAverage(), CrossValidationMicroDOA.getAverage(), CrossValidationMacroInnerDOA.getAverage(), CrossValidationMicroInnerDOA.getAverage()); System.out.printf( "Cross Validation: \nPrecision/R-Precision/recall/fall-out/nDCG/rNDCG/reach/macroDOA/microDOA: %f / %f / %f / %f / %f / %f / %f / %f / %f / %f / %f\n", CrossValidationPrecision.getAverage(), CrossValidationRPrecision.getAverage(), CrossValidationRecall.getAverage(), CrossValidationFallOut.getAverage(), CrossValidationNDCG.getAverage(), CrossValidationRNDCG.getAverage(), CrossValidationReach.getAverage(), CrossValidationMacroDOA.getAverage(), CrossValidationMicroDOA.getAverage(), CrossValidationMacroInnerDOA.getAverage(), CrossValidationMicroInnerDOA.getAverage()); return new GLIRStatisticsImpl(CrossValidationPrecision.getAverage(), CrossValidationRPrecision.getAverage(), CrossValidationRecall.getAverage(), CrossValidationFallOut.getAverage(), CrossValidationNDCG.getAverage(), CrossValidationRNDCG.getAverage(), CrossValidationReach.getAverage(), CrossValidationMacroDOA.getAverage(), CrossValidationMicroDOA.getAverage(), CrossValidationMacroInnerDOA.getAverage(), CrossValidationMicroInnerDOA.getAverage()); }
From source file:com.predictionmarketing.itemrecommend.CliMF.java
License:Apache License
private void splitReplyIDs(long userID, Usersitemidset idset) throws TasteException { FastIDSet itemids = dataModel.getItemIDsFromUser(userID); FastIDSet replyids = new FastIDSet(); FastIDSet noreplyids = new FastIDSet(); for (long item : itemids) { long writer = postwriter.get(item); if (dataModel.getPreferenceValue(userID, item) > 0) { if (testuser == userID && writer == coveruser) {//testusercoveruser information Total_Test_records++;//from w w w . ja v a 2s . c om } else { replyids.add(item); } } else { noreplyids.add(item); } } if (userID == testuser) { left_records += replyids.size(); } Total_records += replyids.size(); idset.setReplyidset(replyids.toArray()); idset.setNoreplyidset(noreplyids.toArray()); }
From source file:com.predictionmarketing.itemrecommend.SUSSGDFactorizer.java
License:Apache License
@Override public Factorization factorize() throws TasteException { prepareTraining();/* w w w . ja v a 2 s . c o m*/ double currentLearningRate = learningRate; HashSet<Long> DMusers = new HashSet<Long>(); LongPrimitiveIterator ud = dataModel.getUserIDs(); while (ud.hasNext()) { DMusers.add(ud.nextLong()); } for (int it = 0; it < numIterations; it++) { FastIDSet friends_idset = new FastIDSet(); double Suvpv_array[]; // System.out.println("imawa no."+it); for (long userID : DMusers) { //useriteration if (SocialIDset.contains(userID)) { friends_idset = SocialdataModel.getItemIDsFromUser(userID); } Suvpv_array = generateSuvpv(userID, friends_idset); double len = vectorlength(Suvpv_array); assert len < 1.01; assert len > 0.99; int friends_amount = (testuser == userID) ? friends_idset.size() - 1 : friends_idset.size(); //testuser friends?-1 () double mother = (double) friends_amount / 250 + 1; double alpha = (double) 1 - (1 / mother); // double alpha=0.1;//(double)1-(1/mother); // social degree // double alpha=0; assert alpha < 0.5; updateParameters(userID, currentLearningRate, Suvpv_array, alpha); friends_idset.clear(); } currentLearningRate *= learningRateDecay; } //end learning iteration //System.out.println("Total records"+Total_records/10); //aggregate writer feature produce a new user-write vectors replace itemVectors double[][] writerVectors = new double[WriterdataModel.getNumUsers()][numFeatures]; LongPrimitiveIterator it = WriterdataModel.getUserIDs(); while (it.hasNext()) { long userid = it.nextLong(); int userIndex = userIndex(userid); for (int i = 0; i < numFeatures; i++) { writerVectors[userIndex][i] = 0.0; } int post_count = 0; for (long item : WriterdataModel.getItemIDsFromUser(userid)) { int itemIndex = itemIndex(item); if (itemIndex < dataModel.getNumItems()) { post_count++; for (int i = 0; i < numFeatures; i++) { writerVectors[userIndex][i] += itemVectors[itemIndex][i]; } } } if (post_count > 0) { //unit vector writerVectors[userIndex] = unitvectorize(writerVectors[userIndex]); writerVectors[userIndex][USER_BIAS_INDEX] /= post_count; writerVectors[userIndex][ITEM_BIAS_INDEX] /= post_count; } } int n = (int) (Math.random() * dataModel.getNumUsers()); //System.out.println("writer"+n+" user bias:"+writerVectors[n][USER_BIAS_INDEX]); // System.out.println("writer"+n+"item bias:"+writerVectors[n][ITEM_BIAS_INDEX]); assert writerVectors[n][USER_BIAS_INDEX] > 0.99; assert writerVectors[n][USER_BIAS_INDEX] < 1.01; return createFactorization(userVectors, writerVectors);//(userVectors, itemVectors); }
From source file:com.staticvillage.recommender.LocalRescorer.java
License:Apache License
private FastIDSet getLocalIds() throws IndexerException { FastIDSet fastIDSet = new FastIDSet(); List<Place> places = indexer.getBeans(geoPoint); for (int i = 0; i < places.size(); i++) { long id = Long.valueOf(places.get(i).id); fastIDSet.add(id);//from w w w .j a v a 2 s.c om } return fastIDSet; }
From source file:com.webir.popcornsaver.cluster.TreeClusteringRecommender.java
License:Apache License
@Override public FastIDSet getCluster(long userID) throws TasteException { buildClusters();/*from www .j a v a 2 s . c om*/ FastIDSet cluster = clustersByUserID.get(userID); return cluster == null ? new FastIDSet() : cluster; }