Example usage for org.apache.mahout.cf.taste.impl.common RunningAverage getCount

List of usage examples for org.apache.mahout.cf.taste.impl.common RunningAverage getCount

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.impl.common RunningAverage getCount.

Prototype

int getCount();

Source Link

Usage

From source file:net.ufida.info.mahout.common.MemoryDiffStorage.java

License:Apache License

@Override
public void removeItemPref(long userID, long itemIDA, float prefValue) throws TasteException {
    PreferenceArray userPreferences = dataModel.getPreferencesFromUser(userID);
    try {//from   www  . j  ava  2 s .c  om
        buildAverageDiffsLock.writeLock().lock();

        FastByIDMap<RunningAverage> aMap = averageDiffs.get(itemIDA);

        int length = userPreferences.length();
        for (int i = 0; i < length; i++) {

            long itemIDB = userPreferences.getItemID(i);
            float bValue = userPreferences.getValue(i);

            if (itemIDA < itemIDB) {

                if (aMap != null) {
                    RunningAverage average = aMap.get(itemIDB);
                    if (average != null) {
                        if (average.getCount() <= 1) {
                            aMap.remove(itemIDB);
                        } else {
                            average.removeDatum(bValue - prefValue);
                        }
                    }
                }

            } else if (itemIDA > itemIDB) {

                FastByIDMap<RunningAverage> bMap = averageDiffs.get(itemIDB);
                if (bMap != null) {
                    RunningAverage average = bMap.get(itemIDA);
                    if (average != null) {
                        if (average.getCount() <= 1) {
                            aMap.remove(itemIDA);
                        } else {
                            average.removeDatum(prefValue - bValue);
                        }
                    }
                }

            }
        }

    } finally {
        buildAverageDiffsLock.writeLock().unlock();
    }
}

From source file:net.ufida.info.mahout.common.MemoryDiffStorage.java

License:Apache License

private void pruneInconsequentialDiffs() {
    // Go back and prune inconsequential diffs. "Inconsequential" means, here, only represented by one
    // data point, so possibly unreliable
    Iterator<Map.Entry<Long, FastByIDMap<RunningAverage>>> it1 = averageDiffs.entrySet().iterator();
    while (it1.hasNext()) {
        FastByIDMap<RunningAverage> map = it1.next().getValue();
        Iterator<Map.Entry<Long, RunningAverage>> it2 = map.entrySet().iterator();
        while (it2.hasNext()) {
            RunningAverage average = it2.next().getValue();
            if (average.getCount() <= 1) {
                it2.remove();/*from w w w  .j  a v  a 2 s  . c  o  m*/
            }
        }
        if (map.isEmpty()) {
            it1.remove();
        } else {
            map.rehash();
        }
    }
    averageDiffs.rehash();
}

From source file:net.ufida.info.mahout.common.SlopeOneRecommender.java

License:Apache License

private float doEstimatePreference(long userID, long itemID) throws TasteException {
    double count = 0.0;
    double totalPreference = 0.0;
    PreferenceArray prefs = getDataModel().getPreferencesFromUser(userID);
    RunningAverage[] averages = diffStorage.getDiffs(userID, itemID, prefs);
    int size = prefs.length();
    for (int i = 0; i < size; i++) {
        RunningAverage averageDiff = averages[i];
        if (averageDiff != null) {
            double averageDiffValue = averageDiff.getAverage();
            if (weighted) {
                double weight = averageDiff.getCount();
                if (stdDevWeighted) {
                    double stdev = ((RunningAverageAndStdDev) averageDiff).getStandardDeviation();
                    if (!Double.isNaN(stdev)) {
                        weight /= 1.0 + stdev;
                    }//from w w  w  . ja  v  a  2  s. co m
                    // If stdev is NaN, then it is because count is 1. Because we're weighting by count,
                    // the weight is already relatively low. We effectively assume stdev is 0.0 here and
                    // that is reasonable enough. Otherwise, dividing by NaN would yield a weight of NaN
                    // and disqualify this pref entirely
                    // (Thanks Daemmon)
                }
                totalPreference += weight * (prefs.getValue(i) + averageDiffValue);
                count += weight;
            } else {
                totalPreference += prefs.getValue(i) + averageDiffValue;
                count += 1.0;
            }
        }
    }
    if (count <= 0.0) {
        RunningAverage itemAverage = diffStorage.getAverageItemPref(itemID);
        return itemAverage == null ? Float.NaN : (float) itemAverage.getAverage();
    } else {
        return (float) (totalPreference / count);
    }
}