List of usage examples for org.apache.mahout.cf.taste.model PreferenceArray getIDs
long[] getIDs();
From source file:de.tuberlin.dima.recsys.ssnmm.interactioncut.BiasedItemBasedRecommender.java
License:Apache License
@Override protected float doEstimatePreference(long userID, PreferenceArray preferencesFromUser, long itemID) throws TasteException { double preference = 0.0; double totalSimilarity = 0.0; int count = 0; long[] userIDs = preferencesFromUser.getIDs(); float[] ratings = new float[userIDs.length]; long[] itemIDs = new long[userIDs.length]; double[] similarities = similarity.itemSimilarities(itemID, userIDs); for (int n = 0; n < preferencesFromUser.length(); n++) { ratings[n] = preferencesFromUser.get(n).getValue(); itemIDs[n] = preferencesFromUser.get(n).getItemID(); }/*from www .ja va 2 s .c o m*/ quickSort(similarities, ratings, itemIDs, 0, (similarities.length - 1)); for (int i = 0; i < Math.min(k, similarities.length); i++) { double theSimilarity = similarities[i]; if (!Double.isNaN(theSimilarity)) { preference += theSimilarity * (ratings[i] - baselineEstimate(userID, itemIDs[i])); totalSimilarity += theSimilarity; count++; } } if (count <= 1) { return Float.NaN; } float estimate = (float) (baselineEstimate(userID, itemID) + (preference / totalSimilarity)); return estimate; }
From source file:norbert.mynemo.core.evaluation.PreferenceMaskerModelBuilder.java
License:Apache License
@Override public DataModel buildDataModel(FastByIDMap<PreferenceArray> trainingData) { // reset data from the previous call fakeUserPreferenceArray = null;//from www . j ava 2 s . co m maskedPreferences = null; fakePreferencesForItem.clear(); maskedItems.clear(); // find the missing preferences PreferenceArray newPreferences = trainingData.get(targetUser); try { maskedPreferences = dataModel.getItemIDsFromUser(targetUser).clone(); } catch (TasteException e) { // the taste exception have to be wrapped throw new IllegalStateException(e); } for (long itemId : newPreferences.getIDs()) { maskedPreferences.remove(itemId); } // find the items that have only one preference: the target user one for (Long preference : maskedPreferences) { try { if (dataModel.getNumUsersWithPreferenceFor(preference) == 1) { maskedItems.add(preference); } } catch (TasteException e) { // the taste exception have to be wrapped throw new IllegalStateException(e); } } return this; }
From source file:org.easyrec.mahout.EasyrecInMemoryDataModelTest.java
License:Open Source License
@Test public void testEasyrecDataModel_getPreferencesForItem() throws TasteException { DataModel easyrecDataModel = new EasyrecDataModel(TENANT_ID, RATE_ACTION_TYPE_ID, HAS_RATING_VALUES, mahoutDataModelMappingDAO);/*from ww w .j av a 2s . c o m*/ easyrecDataModel = new EasyrecInMemoryDataModel(easyrecDataModel); PreferenceArray preferences = easyrecDataModel.getPreferencesForItem(1); String ids = ""; for (long id : preferences.getIDs()) { ids += id; } assertEquals("12", ids); }
From source file:org.easyrec.mahout.EasyrecInMemoryDataModelTest.java
License:Open Source License
@Test public void testEasyrecDataModel_getPreferencesFromUser() throws TasteException { DataModel easyrecDataModel = new EasyrecDataModel(TENANT_ID, RATE_ACTION_TYPE_ID, HAS_RATING_VALUES, mahoutDataModelMappingDAO);//w ww.j a v a 2s. co m easyrecDataModel = new EasyrecInMemoryDataModel(easyrecDataModel); PreferenceArray preferences = easyrecDataModel.getPreferencesFromUser(1); String ids = ""; for (long id : preferences.getIDs()) { ids += id; } assertEquals("123", ids); }
From source file:org.easyrec.mahout.EasyrecInMemoryDataModelTest.java
License:Open Source License
@Test public void testEasyrecDataModel_getBooleanPreferencesForItem() throws TasteException { DataModel easyrecDataModel = new EasyrecDataModel(TENANT_ID, BUY_ACTION_TYPE_ID, HAS_NO_RATING_VALUES, mahoutDataModelMappingDAO);/*w w w. ja va2s .c om*/ easyrecDataModel = new EasyrecInMemoryDataModel(easyrecDataModel); PreferenceArray preferences = easyrecDataModel.getPreferencesForItem(10); String ids = ""; for (long id : preferences.getIDs()) { ids += id; } assertEquals("12", ids); }
From source file:org.easyrec.mahout.EasyrecInMemoryDataModelTest.java
License:Open Source License
@Test public void testEasyrecDataModel_getBooleanPreferencesFromUser() throws TasteException { DataModel easyrecDataModel = new EasyrecDataModel(TENANT_ID, BUY_ACTION_TYPE_ID, HAS_NO_RATING_VALUES, mahoutDataModelMappingDAO);/*from w w w .j a v a 2s . c om*/ easyrecDataModel = new EasyrecInMemoryDataModel(easyrecDataModel); PreferenceArray preferences = easyrecDataModel.getPreferencesFromUser(1); String ids = ""; for (long id : preferences.getIDs()) { ids += id; } assertEquals("102030", ids); }
From source file:org.easyrec.mahout.model.EasyrecInMemoryDataModel.java
License:Open Source License
private void intializeDelegate() { try {//from w w w. j av a2 s. c o m //iterate over all user ids LongPrimitiveIterator it = easyrecDataModelDelegate.getUserIDs(); FastByIDMap<PreferenceArray> preferences = new FastByIDMap<PreferenceArray>( easyrecDataModelDelegate.getNumUsers()); FastByIDMap<FastByIDMap<Long>> timestamps = new FastByIDMap<FastByIDMap<Long>>( easyrecDataModelDelegate.getNumUsers()); while (it.hasNext()) { Long userId = it.next(); //get preferences for each user PreferenceArray prefs = easyrecDataModelDelegate.getPreferencesFromUser(userId); preferences.put(userId, prefs); //get preference times for each user FastByIDMap<Long> timestampsForUser = new FastByIDMap<Long>(prefs.getIDs().length); for (Long itemId : prefs.getIDs()) { timestampsForUser.put(itemId, easyrecDataModelDelegate.getPreferenceTime(userId, itemId)); } timestamps.put(userId, timestampsForUser); } //generate GenericDataModel setMaxPreference(easyrecDataModelDelegate.getMaxPreference()); setMinPreference(easyrecDataModelDelegate.getMinPreference()); this.inMemoryDelegate = new GenericDataModel(preferences, timestamps); } catch (TasteException e) { logger.warn("caught exception while reading preference data", e); } }
From source file:org.plista.kornakapi.core.optimizer.ErrorALSWRFactorizer.java
License:Apache License
@Override public ErrorFactorization 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()); }/* ww w . j a v a 2 s . co m*/ Double[] errors = new Double[numIterations]; for (int iteration = 0; iteration < numIterations; iteration++) { LongPrimitiveIterator userIDsIterator = dataModel.getUserIDs(); LongPrimitiveIterator itemIDsIterator = dataModel.getItemIDs(); log.info("iteration {}", iteration); /* fix M - compute U */ ExecutorService queue = createQueue(); try { final ImplicitFeedbackAlternatingLeastSquaresSolver implicitFeedbackSolver = usesImplicitFeedback ? new ImplicitFeedbackAlternatingLeastSquaresSolver(numFeatures, lambda, alpha, itemY) : null; while (userIDsIterator.hasNext()) { final long userID = userIDsIterator.nextLong(); if (usesImplicitFeedback) { final PreferenceArray userPrefs = dataModel.getPreferencesFromUser(userID); queue.execute(new Runnable() { @Override public void run() { Vector userFeatures = implicitFeedbackSolver .solve(sparseUserRatingVector(userPrefs)); //userFeatures = userFeatures.divide(Math.sqrt(userFeatures.getLengthSquared())); features.setFeatureColumnInU(userIndex(userID), userFeatures); } }); } else { 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 = 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(); try { final ImplicitFeedbackAlternatingLeastSquaresSolver implicitFeedbackSolver = usesImplicitFeedback ? new ImplicitFeedbackAlternatingLeastSquaresSolver(numFeatures, lambda, alpha, userY) : null; if (usesImplicitFeedback) { while (itemIDsIterator.hasNext()) { final long itemID = itemIDsIterator.nextLong(); final PreferenceArray itemPrefs = dataModel.getPreferencesForItem(itemID); queue.execute(new Runnable() { @Override public void run() { Vector itemFeatures = implicitFeedbackSolver .solve(sparseItemRatingVector(itemPrefs)); //itemFeatures = itemFeatures.divide(Math.sqrt(itemFeatures.getLengthSquared())); features.setFeatureColumnInM(itemIndex(itemID), itemFeatures); } }); } } else { 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 = 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); } } userIDsIterator = testModel.getUserIDs(); double error = 0; while (userIDsIterator.hasNext()) { Long userID = userIDsIterator.next(); PreferenceArray userPrefs = testModel.getPreferencesFromUser(userID); Vector userf = features.getUserFeatureColumn(userIndex(userID)); long[] itemIDs = userPrefs.getIDs(); int idx = 0; for (long itemID : itemIDs) { Vector itemf = features.getItemFeatureColumn(itemIndex(itemID)); double pref = itemf.dot(userf); double realpref = userPrefs.getValue(idx); idx++; error = error + Math.abs(pref - realpref); } } errors[iteration] = error; } ErrorFactorization factorization = createErrorFactorization(features.getU(), features.getM(), errors); log.info("finished computation of the factorization..."); return factorization; }
From source file:org.plista.kornakapi.core.recommender.CachingAllUnknownItemsCandidateItemsStrategy.java
License:Apache License
@Override public FastIDSet getCandidateItems(long userID, PreferenceArray preferencesFromUser, DataModel dataModel) throws TasteException { FastIDSet possibleItemIDs = allItemIDs.clone(); possibleItemIDs.removeAll(preferencesFromUser.getIDs()); return possibleItemIDs; }
From source file:org.plista.kornakapi.core.recommender.FoldingFactorizationBasedRecommender.java
License:Apache License
@Override public List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException { long fetchHistoryStart = System.currentTimeMillis(); PreferenceArray preferencesFromUser = getDataModel().getPreferencesFromUser(userID); long fetchHistoryDuration = System.currentTimeMillis() - fetchHistoryStart; if (log.isDebugEnabled()) { log.debug("fetched {} interactions of user {} in {} ms", new Object[] { preferencesFromUser.length(), userID, fetchHistoryDuration }); }// www . j a v a 2s . c o m return recommend(userID, preferencesFromUser.getIDs(), howMany, rescorer); }