Example usage for org.apache.mahout.cf.taste.model Preference getUserID

List of usage examples for org.apache.mahout.cf.taste.model Preference getUserID

Introduction

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

Prototype

long getUserID();

Source Link

Usage

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