List of usage examples for org.apache.mahout.cf.taste.model Preference getValue
float getValue();
From source file:GavaFactorizer.java
License:Apache License
double getAveragePreference() throws TasteException { RunningAverage average = new FullRunningAverage(); LongPrimitiveIterator it = dataModel.getUserIDs(); while (it.hasNext()) { for (Preference pref : dataModel.getPreferencesFromUser(it.nextLong())) { average.addDatum(pref.getValue()); }/*from w ww. ja va2s. c o m*/ } return average.getAverage(); }
From source file:com.anjuke.romar.mahout.util.Util.java
License:Apache License
public static void applyAdd(FastByIDMap<PreferenceArray> data, Preference addPreference) { long userID = addPreference.getUserID(); long itemID = addPreference.getItemID(); float preferenceValue = addPreference.getValue(); PreferenceArray prefs = data.get(userID); boolean exists = false; if (prefs != null) { for (int i = 0; i < prefs.length(); i++) { if (prefs.getItemID(i) == itemID) { exists = true;//from w w w .j a v a 2s .com prefs.setValue(i, preferenceValue); break; } } } if (!exists) { if (prefs == null) { prefs = new GenericUserPreferenceArray(1); } else { PreferenceArray newPrefs = new GenericUserPreferenceArray(prefs.length() + 1); for (int i = 0, j = 1; i < prefs.length(); i++, j++) { newPrefs.set(j, prefs.get(i)); } prefs = newPrefs; } prefs.setUserID(0, userID); prefs.setItemID(0, itemID); prefs.setValue(0, preferenceValue); data.put(userID, prefs); } }
From source file:com.innometrics.integration.app.recommender.ml.als.ALSWRFactorizer.java
License:Apache License
protected Vector sparseItemRatingVector(PreferenceArray prefs) { SequentialAccessSparseVector ratings = new SequentialAccessSparseVector(Integer.MAX_VALUE, prefs.length()); for (Preference preference : prefs) { ratings.set(userIndex(preference.getUserID()), preference.getValue()); }//from w w w .j a va 2 s. c o m return ratings; }
From source file:com.innometrics.integration.app.recommender.ml.als.ALSWRFactorizer.java
License:Apache License
protected Vector sparseUserRatingVector(PreferenceArray prefs) { SequentialAccessSparseVector ratings = new SequentialAccessSparseVector(Integer.MAX_VALUE, prefs.length()); for (Preference preference : prefs) { ratings.set(itemIndex(preference.getItemID()), preference.getValue()); }//from w w w . j a v a 2s . c om return ratings; }
From source file:com.msiiplab.recsys.rwr.GLRecommenderIRStatsEvaluator.java
License:Apache License
protected double computeRNDCG(PreferenceArray userPreferences, PreferenceArray userPredictions, FastIDSet relevantItemIDs, FastByIDMap<Preference> userPreferenceMap, int at) { double rCumulativeGain = 0.0; double rIdealizedGain = 0.0; // compute IDCG Iterator<Preference> it_pref = userPreferences.iterator(); int i = 0;//w ww . j av a2s. c o m while (it_pref.hasNext()) { Preference pref = it_pref.next(); if (i < at) { double discount = 1.0 / log2(i + 2.0); float rel = pref.getValue(); rIdealizedGain += rel * discount; } else { break; } i++; } // compute DCG it_pref = userPredictions.iterator(); i = 0; while (it_pref.hasNext()) { Preference pref = it_pref.next(); long itemID = pref.getItemID(); if (relevantItemIDs.contains(itemID) && i < at) { double discount = 1.0 / log2(i + 2.0); float rel = userPreferenceMap.get(itemID).getValue(); rCumulativeGain += rel * discount; } i++; } if (rIdealizedGain > 0) { return rCumulativeGain / rIdealizedGain; } else { return 0; } }
From source file:com.mykidscart.mahout_service.RecommenderServlet.java
License:Apache License
private void writeDebugRecommendations(long userID, Iterable<RecommendedItem> items, PrintWriter writer) throws TasteException { DataModel dataModel = recommender.getDataModel(); writer.print("User:"); writer.println(userID);/*www . j a va2 s.c o m*/ writer.print("Recommender: "); writer.println(recommender); writer.println(); writer.print("Top "); writer.print(NUM_TOP_PREFERENCES); writer.println(" Preferences:"); PreferenceArray rawPrefs = dataModel.getPreferencesFromUser(userID); int length = rawPrefs.length(); PreferenceArray sortedPrefs = rawPrefs.clone(); sortedPrefs.sortByValueReversed(); // Cap this at NUM_TOP_PREFERENCES just to be brief int max = Math.min(NUM_TOP_PREFERENCES, length); for (int i = 0; i < max; i++) { Preference pref = sortedPrefs.get(i); writer.print(pref.getValue()); writer.print('\t'); writer.println(pref.getItemID()); } writer.println(); writer.println("Recommendations:"); for (RecommendedItem recommendedItem : items) { writer.print(recommendedItem.getValue()); writer.print('\t'); writer.println(recommendedItem.getItemID()); } }
From source file:com.predictionmarketing.itemrecommend.CliMF.java
License:Apache License
public void computeBias() throws TasteException { //user bias//from ww w .j av a2s . co m double userAverage = 0; double userMax = -Double.MAX_VALUE; double userMin = Double.MAX_VALUE; LongPrimitiveIterator userIDs = dataModel.getUserIDs(); while (userIDs.hasNext()) { long userid = userIDs.nextLong(); double user_sum = 0; for (Preference record : dataModel.getPreferencesFromUser(userid)) { user_sum += record.getValue(); } userAverage += user_sum; userMax = (user_sum > userMax) ? user_sum : userMax; userMin = (user_sum < userMin) ? user_sum : userMin; int userindex = userIndex(userid); userVectors[userindex][USER_BIAS_INDEX] = user_sum; } userAverage /= dataModel.getNumUsers(); double min_dist = userAverage - userMin; double max_dist = userMax - userAverage; double normalize = (min_dist > max_dist) ? min_dist : max_dist; userIDs = dataModel.getUserIDs(); while (userIDs.hasNext()) { long userid = userIDs.nextLong(); int userindex = userIndex(userid); userVectors[userindex][USER_BIAS_INDEX] -= userAverage; userVectors[userindex][USER_BIAS_INDEX] /= normalize; } //item bias double itemAverage = 0; double itemMax = -Double.MAX_VALUE; double itemMin = Double.MAX_VALUE; LongPrimitiveIterator itemIDs = dataModel.getItemIDs(); while (itemIDs.hasNext()) { long itemid = itemIDs.nextLong(); double item_sum = 0; for (Preference record : dataModel.getPreferencesForItem(itemid)) { item_sum += record.getValue(); } itemAverage += item_sum; itemMax = (item_sum > itemMax) ? item_sum : itemMax; itemMin = (item_sum < itemMin) ? item_sum : itemMin; int itemindex = itemIndex(itemid); itemVectors[itemindex][ITEM_BIAS_INDEX] = item_sum; } itemAverage /= dataModel.getNumItems(); min_dist = itemAverage - itemMin; max_dist = itemMax - itemAverage; normalize = (min_dist > max_dist) ? min_dist : max_dist; itemIDs = dataModel.getItemIDs(); while (itemIDs.hasNext()) { long itemid = itemIDs.nextLong(); int itemindex = itemIndex(itemid); itemVectors[itemindex][ITEM_BIAS_INDEX] -= itemAverage; itemVectors[itemindex][ITEM_BIAS_INDEX] /= normalize; } }
From source file:com.predictionmarketing.itemrecommend.RatingSGDFactorizer.java
License:Apache License
protected void prepareTraining() throws TasteException { RandomWrapper random = (RandomWrapper) RandomUtils.getRandom(0L); userVectors = new double[dataModel.getNumUsers()][numFeatures]; itemVectors = new double[dataModel.getNumItems()][numFeatures]; LongPrimitiveIterator socialuser = SocialdataModel.getUserIDs(); while (socialuser.hasNext()) { //create social date model idset because user may have no friend ,and it will cause bug long userID = socialuser.nextLong(); SocialIDset.add(userID);/*from w w w . j a va 2s .c om*/ } double globalAverage = getAveragePreference(); for (int userIndex = 0; userIndex < userVectors.length; userIndex++) { userVectors[userIndex][0] = globalAverage; userVectors[userIndex][USER_BIAS_INDEX] = 0; // will store user bias userVectors[userIndex][ITEM_BIAS_INDEX] = 1; // corresponding item feature contains item bias for (int feature = FEATURE_OFFSET; feature < numFeatures; feature++) { userVectors[userIndex][feature] = random.nextGaussian() * randomNoise; } } for (int itemIndex = 0; itemIndex < itemVectors.length; itemIndex++) { itemVectors[itemIndex][0] = 1; // corresponding user feature contains global average itemVectors[itemIndex][USER_BIAS_INDEX] = 1; // corresponding user feature contains user bias itemVectors[itemIndex][ITEM_BIAS_INDEX] = 0; // will store item bias for (int feature = FEATURE_OFFSET; feature < numFeatures; feature++) { itemVectors[itemIndex][feature] = random.nextGaussian() * randomNoise; } } //compute bias //user bias double userAverage = 0; double userMax = -Double.MAX_VALUE; double userMin = Double.MAX_VALUE; LongPrimitiveIterator userIDs = dataModel.getUserIDs(); while (userIDs.hasNext()) { long userid = userIDs.nextLong(); double user_sum = 0; for (Preference record : dataModel.getPreferencesFromUser(userid)) { user_sum += record.getValue(); } userAverage += user_sum; userMax = (user_sum > userMax) ? user_sum : userMax; userMin = (user_sum < userMin) ? user_sum : userMin; int userindex = userIndex(userid); userVectors[userindex][USER_BIAS_INDEX] = user_sum; } userAverage /= dataModel.getNumUsers(); double min_dist = userAverage - userMin; double max_dist = userMax - userAverage; double normalize = (min_dist > max_dist) ? min_dist : max_dist; userIDs = dataModel.getUserIDs(); while (userIDs.hasNext()) { long userid = userIDs.nextLong(); int userindex = userIndex(userid); userVectors[userindex][USER_BIAS_INDEX] -= userAverage; userVectors[userindex][USER_BIAS_INDEX] /= normalize; } //item bias double itemAverage = 0; double itemMax = -Double.MAX_VALUE; double itemMin = Double.MAX_VALUE; LongPrimitiveIterator itemIDs = dataModel.getItemIDs(); while (itemIDs.hasNext()) { long itemid = itemIDs.nextLong(); double item_sum = 0; for (Preference record : dataModel.getPreferencesForItem(itemid)) { item_sum += record.getValue(); } itemAverage += item_sum; itemMax = (item_sum > itemMax) ? item_sum : itemMax; itemMin = (item_sum < itemMin) ? item_sum : itemMin; int itemindex = itemIndex(itemid); itemVectors[itemindex][ITEM_BIAS_INDEX] = item_sum; } itemAverage /= dataModel.getNumItems(); min_dist = itemAverage - itemMin; max_dist = itemMax - itemAverage; normalize = (min_dist > max_dist) ? min_dist : max_dist; itemIDs = dataModel.getItemIDs(); while (itemIDs.hasNext()) { long itemid = itemIDs.nextLong(); int itemindex = itemIndex(itemid); itemVectors[itemindex][ITEM_BIAS_INDEX] -= itemAverage; itemVectors[itemindex][ITEM_BIAS_INDEX] /= normalize; } cachePreferences(); shufflePreferences(); }
From source file:de.tuberlin.dima.recsys.ssnmm.interactioncut.BiasedItemBasedRecommender.java
License:Apache License
public BiasedItemBasedRecommender(DataModel dataModel, ItemSimilarity similarity, int k, double lambda2, double lambda3) throws TasteException { super(dataModel, similarity); this.k = k;/*from w w w .j a va2 s . co m*/ this.similarity = similarity; RunningAverage averageRating = new FullRunningAverage(); LongPrimitiveIterator itemIDs = getDataModel().getItemIDs(); while (itemIDs.hasNext()) { for (Preference pref : getDataModel().getPreferencesForItem(itemIDs.next())) { averageRating.addDatum(pref.getValue()); } } mu = averageRating.getAverage(); itemBiases = new OpenLongDoubleHashMap(getDataModel().getNumItems()); userBiases = new OpenLongDoubleHashMap(getDataModel().getNumUsers()); itemIDs = getDataModel().getItemIDs(); while (itemIDs.hasNext()) { long itemID = itemIDs.nextLong(); PreferenceArray preferences = getDataModel().getPreferencesForItem(itemID); double sum = 0; for (Preference pref : preferences) { sum += pref.getValue() - mu; } double bi = sum / (lambda2 + preferences.length()); itemBiases.put(itemID, bi); } LongPrimitiveIterator userIDs = getDataModel().getUserIDs(); while (userIDs.hasNext()) { long userID = userIDs.nextLong(); PreferenceArray preferences = getDataModel().getPreferencesFromUser(userID); double sum = 0; for (Preference pref : preferences) { sum += pref.getValue() - mu - itemBiases.get(pref.getItemID()); } double bu = sum / (lambda3 + preferences.length()); userBiases.put(userID, bu); } }
From source file:de.unima.dws.webmining.rs.recommender.AvgUserPrefAdaptedUserBasedRecommender.java
License:Apache License
protected Float calculateAverageRating(long userID) throws TasteException { Float avgPref = null;/*ww w . j a v a 2 s . c o m*/ DataModel dataModel = getDataModel(); PreferenceArray preferences = dataModel.getPreferencesFromUser(userID); float sum = 0; for (int i = 0; i < preferences.length(); i++) { Preference preference = preferences.get(i); sum += preference.getValue(); } if (preferences.length() > 0) { avgPref = sum / preferences.length(); } else { avgPref = 0.0f; } return avgPref; }