List of usage examples for org.apache.mahout.cf.taste.model Preference getUserID
long getUserID();
From source file:com.anjuke.romar.mahout.RecommenderWrapper.java
License:Apache License
@Override public void removeItem(long itemID) throws TasteException { DataModel dataModel = _recommender.getDataModel(); for (Preference p : dataModel.getPreferencesForItem(itemID)) { removePreference(p.getUserID(), itemID); }/* www .j av a 2s. co m*/ }
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;/* w ww . j a v a 2 s .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.anjuke.romar.mahout.util.Util.java
License:Apache License
public static void applyRemove(FastByIDMap<PreferenceArray> data, Preference removePreference) { long userID = removePreference.getUserID(); long itemID = removePreference.getItemID(); PreferenceArray prefs = data.get(userID); if (prefs != null) { boolean exists = false; int length = prefs.length(); for (int i = 0; i < length; i++) { if (prefs.getItemID(i) == itemID) { exists = true;//from w w w .ja v a 2 s .co m break; } } if (exists) { if (length == 1) { data.remove(userID); } else { PreferenceArray newPrefs = new GenericUserPreferenceArray(length - 1); for (int i = 0, j = 0; i < length; i++, j++) { if (prefs.getItemID(i) == itemID) { j--; } else { newPrefs.set(j, prefs.get(i)); } } data.put(userID, newPrefs); } } } }
From source file:com.innometrics.integration.app.recommender.ml.als.ALSWRFactorizer.java
License:Apache License
@Override public Factorization factorize() throws TasteException { log.info("starting to compute the factorization..."); final Features features = new Features(this); /* feature maps necessary for solving for implicit feedback */ OpenIntObjectHashMap<Vector> userY = null; OpenIntObjectHashMap<Vector> itemY = null; if (usesImplicitFeedback) { userY = userFeaturesMapping(dataModel.getUserIDs(), dataModel.getNumUsers(), features.getU()); itemY = itemFeaturesMapping(dataModel.getItemIDs(), dataModel.getNumItems(), features.getM()); }//from w w w. j av a 2s.c o m for (int iteration = 0; iteration < numIterations; iteration++) { log.info("iteration {}", iteration); /* fix M - compute U */ ExecutorService queue = createQueue(); LongPrimitiveIterator userIDsIterator = dataModel.getUserIDs(); try { final ImplicitFeedbackAlternatingLeastSquaresSolver implicitFeedbackSolver = usesImplicitFeedback ? new ImplicitFeedbackAlternatingLeastSquaresSolver(numFeatures, lambda, alpha, itemY, numTrainingThreads) : null; while (userIDsIterator.hasNext()) { final long userID = userIDsIterator.nextLong(); final LongPrimitiveIterator itemIDsFromUser = dataModel.getItemIDsFromUser(userID).iterator(); final PreferenceArray userPrefs = dataModel.getPreferencesFromUser(userID); queue.execute(new Runnable() { @Override public void run() { List<Vector> featureVectors = Lists.newArrayList(); while (itemIDsFromUser.hasNext()) { long itemID = itemIDsFromUser.nextLong(); featureVectors.add(features.getItemFeatureColumn(itemIndex(itemID))); } Vector userFeatures = usesImplicitFeedback ? implicitFeedbackSolver.solve(sparseUserRatingVector(userPrefs)) : AlternatingLeastSquaresSolver.solve(featureVectors, ratingVector(userPrefs), lambda, numFeatures); features.setFeatureColumnInU(userIndex(userID), userFeatures); } }); } } finally { queue.shutdown(); try { queue.awaitTermination(dataModel.getNumUsers(), TimeUnit.SECONDS); } catch (InterruptedException e) { log.warn("Error when computing user features", e); } } /* fix U - compute M */ queue = createQueue(); LongPrimitiveIterator itemIDsIterator = dataModel.getItemIDs(); try { final ImplicitFeedbackAlternatingLeastSquaresSolver implicitFeedbackSolver = usesImplicitFeedback ? new ImplicitFeedbackAlternatingLeastSquaresSolver(numFeatures, lambda, alpha, userY, numTrainingThreads) : null; while (itemIDsIterator.hasNext()) { final long itemID = itemIDsIterator.nextLong(); final PreferenceArray itemPrefs = dataModel.getPreferencesForItem(itemID); queue.execute(new Runnable() { @Override public void run() { List<Vector> featureVectors = Lists.newArrayList(); for (Preference pref : itemPrefs) { long userID = pref.getUserID(); featureVectors.add(features.getUserFeatureColumn(userIndex(userID))); } Vector itemFeatures = usesImplicitFeedback ? implicitFeedbackSolver.solve(sparseItemRatingVector(itemPrefs)) : AlternatingLeastSquaresSolver.solve(featureVectors, ratingVector(itemPrefs), lambda, numFeatures); features.setFeatureColumnInM(itemIndex(itemID), itemFeatures); } }); } } finally { queue.shutdown(); try { queue.awaitTermination(dataModel.getNumItems(), TimeUnit.SECONDS); } catch (InterruptedException e) { log.warn("Error when computing item features", e); } } } log.info("finished computation of the factorization..."); return createFactorization(features.getU(), features.getM()); }
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 ww w. jav a2 s . com*/ return ratings; }
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()); }// w w w . ja v a 2s . c om return fastIDSet; }
From source file:com.msiiplab.recsys.implicit.TanimotoIDF2CoefficientSimilarity.java
License:Apache License
private double doItemSimilarity(long itemID1, long itemID2, FastIDSet preferring1) throws TasteException { double intersection = 0.0; double union = 0.0; for (Preference pref : getDataModel().getPreferencesForItem(itemID2)) { long userID = pref.getUserID(); double weight = (double) getDataModel().getNumItems() / mUserPrefNum.get(userID); if (preferring1.contains(userID)) { intersection += weight;// ww w . j a va 2s. co m union -= weight; } union += weight; } for (LongPrimitiveIterator it_user = preferring1.iterator(); it_user.hasNext();) { long userID = (long) it_user.nextLong(); double weight = (double) getDataModel().getNumItems() / mUserPrefNum.get(userID); union += weight; } if (intersection == 0) { return Double.NaN; } return Math.log(intersection) / Math.log(union); }
From source file:com.msiiplab.recsys.implicit.TanimotoIDF3CoefficientSimilarity.java
License:Apache License
private double doItemSimilarity(long itemID1, long itemID2, FastIDSet preferring1) throws TasteException { double intersection = 0.0; double union = 0.0; for (Preference pref : getDataModel().getPreferencesForItem(itemID2)) { long userID = pref.getUserID(); double weight = (double) getDataModel().getNumItems() / mUserPrefNum.get(userID); if (preferring1.contains(userID)) { intersection += weight;/* ww w. j ava 2s. c o m*/ union -= weight; } union += weight; } for (LongPrimitiveIterator it_user = preferring1.iterator(); it_user.hasNext();) { long userID = (long) it_user.nextLong(); double weight = (double) getDataModel().getNumItems() / mUserPrefNum.get(userID); union += weight; } if (intersection == 0) { return Double.NaN; } return intersection / union; }
From source file:com.msiiplab.recsys.implicit.TanimotoIDFCoefficientSimilarity.java
License:Apache License
private double doItemSimilarity(long itemID1, long itemID2, FastIDSet preferring1) throws TasteException { double intersection = 0.0; double union = 0.0; for (Preference pref : getDataModel().getPreferencesForItem(itemID2)) { long userID = pref.getUserID(); double weight = Math.log((double) getDataModel().getNumItems() / mUserPrefNum.get(userID)); if (preferring1.contains(userID)) { intersection += weight;/*w w w .j a v a 2 s . co m*/ union -= weight; } union += weight; } for (LongPrimitiveIterator it_user = preferring1.iterator(); it_user.hasNext();) { long userID = (long) it_user.nextLong(); double weight = Math.log((double) getDataModel().getNumItems() / mUserPrefNum.get(userID)); union += weight; } if (intersection == 0) { return Double.NaN; } return intersection / union; }
From source file:com.msiiplab.recsys.implicit.TanimotoLFMCoefficientSimilarity.java
License:Apache License
private double doItemSimilarity(long itemID1, long itemID2, FastIDSet preferring1) throws TasteException { double intersection = 0.0; double union = 0.0; for (Preference pref : getDataModel().getPreferencesForItem(itemID2)) { long userID = pref.getUserID(); double weight = mUserPrefEntropy.get(userID); if (preferring1.contains(userID)) { intersection += weight;/*from w w w.j a v a 2 s . co m*/ union -= weight; } union += weight; } for (LongPrimitiveIterator it_user = preferring1.iterator(); it_user.hasNext();) { long userID = (long) it_user.nextLong(); double weight = mUserPrefEntropy.get(userID); union += weight; } if (intersection == 0) { return Double.NaN; } return intersection / union; }