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

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

Introduction

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

Prototype

float getValue();

Source Link

Usage

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