Example usage for org.apache.mahout.cf.taste.model PreferenceArray getIDs

List of usage examples for org.apache.mahout.cf.taste.model PreferenceArray getIDs

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.model PreferenceArray getIDs.

Prototype

long[] getIDs();

Source Link

Usage

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);
}