Package org.apache.mahout.cf.taste.impl.common

Examples of org.apache.mahout.cf.taste.impl.common.RunningAverage


  private static final class PrefRetriever implements Retriever<User, Double> {

    @Override
    public Double get(User key) {
      RunningAverage average = new FullRunningAverage();
      Preference[] prefs = key.getPreferencesAsArray();
      if (prefs.length == 0) {
        return ZERO;
      }
      for (Preference pref : prefs) {
        average.addDatum(pref.getValue());
      }
      return average.getAverage();
    }
View Full Code Here


    double count = 0.0;
    double totalPreference = 0.0;
    Preference[] prefs = theUser.getPreferencesAsArray();
    RunningAverage[] averages = diffStorage.getDiffs(theUser.getID(), itemID, prefs);
    for (int i = 0; i < prefs.length; i++) {
      RunningAverage averageDiff = averages[i];
      if (averageDiff != null) {
        Preference pref = prefs[i];
        double averageDiffValue = averageDiff.getAverage();
        if (weighted) {
          double weight = (double) averageDiff.getCount();
          if (stdDevWeighted) {
            double stdev = ((RunningAverageAndStdDev) averageDiff).getStandardDeviation();
            if (!Double.isNaN(stdev)) {
              weight /= 1.0 + stdev;
            }
            // 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 * (pref.getValue() + averageDiffValue);
          count += weight;
        } else {
          totalPreference += pref.getValue() + averageDiffValue;
          count += 1.0;
        }
      }
    }
    if (count <= 0.0) {
      RunningAverage itemAverage = diffStorage.getAverageItemPref(itemID);
      return itemAverage == null ? Double.NaN : itemAverage.getAverage();
    } else {
      return totalPreference / count;
    }
  }
View Full Code Here

  }

  private double doEstimatePreference(Object userID, Object itemID) {
    buildAveragesLock.readLock().lock();
    try {
      RunningAverage itemAverage = itemAverages.get(itemID);
      if (itemAverage == null) {
        return Double.NaN;
      }
      RunningAverage userAverage = userAverages.get(userID);
      if (userAverage == null) {
        return Double.NaN;
      }
      double userDiff = userAverage.getAverage() - overallAveragePrefValue.getAverage();
      return itemAverage.getAverage() + userDiff;
    } finally {
      buildAveragesLock.readLock().unlock();
    }
  }
View Full Code Here

  }

  private static void addDatumAndCrateIfNeeded(Object itemID,
                                               double value,
                                               Map<Object, RunningAverage> averages) {
    RunningAverage itemAverage = averages.get(itemID);
    if (itemAverage == null) {
      itemAverage = new FullRunningAverage();
      averages.put(itemID, itemAverage);
    }
    itemAverage.addDatum(value);
  }
View Full Code Here

      prefDelta = value;
    }
    super.setPreference(userID, itemID, value);
    try {
      buildAveragesLock.writeLock().lock();
      RunningAverage itemAverage = itemAverages.get(itemID);
      if (itemAverage == null) {
        RunningAverage newItemAverage = new FullRunningAverage();
        newItemAverage.addDatum(prefDelta);
        itemAverages.put(itemID, newItemAverage);
      } else {
        itemAverage.changeDatum(prefDelta);
      }
      RunningAverage userAverage = userAverages.get(userID);
      if (userAverage == null) {
        RunningAverage newUserAveragae = new FullRunningAverage();
        newUserAveragae.addDatum(prefDelta);
        userAverages.put(userID, newUserAveragae);
      } else {
        userAverage.changeDatum(prefDelta);
      }
      overallAveragePrefValue.changeDatum(prefDelta);
View Full Code Here

    super.removePreference(userID, itemID);
    if (oldPref != null) {
      double value = oldPref.getValue();
      try {
        buildAveragesLock.writeLock().lock();
        RunningAverage itemAverage = itemAverages.get(itemID);
        if (itemAverage == null) {
          throw new IllegalStateException("No preferences exist for item ID: " + itemID);
        }
        itemAverage.removeDatum(value);
        RunningAverage userAverage = userAverages.get(userID);
        if (userAverage == null) {
          throw new IllegalStateException("No preferences exist for user ID: " + userID);
        }
        userAverage.removeDatum(value);
        overallAveragePrefValue.removeDatum(value);
      } finally {
        buildAveragesLock.writeLock().unlock();
      }
    }
View Full Code Here

  }

  @Override
  public RunningAverage getDiff(Object itemID1, Object itemID2) {
    Map<Object, RunningAverage> level2Map = averageDiffs.get(itemID1);
    RunningAverage average = null;
    if (level2Map != null) {
      average = level2Map.get(itemID2);
    }
    boolean inverted = false;
    if (average == null) {
View Full Code Here

    try {
      buildAverageDiffsLock.readLock().lock();
      for (Map.Entry<Object, FastMap<Object, RunningAverage>> entry : averageDiffs.entrySet()) {
        boolean matchesItemID1 = itemID.equals(entry.getKey());
        for (Map.Entry<Object, RunningAverage> entry2 : entry.getValue().entrySet()) {
          RunningAverage average = entry2.getValue();
          if (matchesItemID1) {
            if (remove) {
              average.removeDatum(prefDelta);
            } else {
              average.changeDatum(-prefDelta);
            }
          } else if (itemID.equals(entry2.getKey())) {
            if (remove) {
              average.removeDatum(-prefDelta);
            } else {
              average.changeDatum(prefDelta);
            }
          }
        }
      }
      RunningAverage itemAverage = averageItemPref.get(itemID);
      if (itemAverage != null) {
        itemAverage.changeDatum(prefDelta);
      }
    } finally {
      buildAverageDiffsLock.readLock().unlock();
    }
  }
View Full Code Here

    Iterator<FastMap<Object, RunningAverage>> it1 = averageDiffs.values().iterator();
    while (it1.hasNext()) {
      FastMap<Object, RunningAverage> map = it1.next();
      Iterator<RunningAverage> it2 = map.values().iterator();
      while (it2.hasNext()) {
        RunningAverage average = it2.next();
        if (average.getCount() <= 1) {
          it2.remove();
        }
      }
      if (map.isEmpty()) {
        it1.remove();
View Full Code Here

      }
      for (int j = i + 1; j < length; j++) {
        // This is a performance-critical block
        Preference prefB = userPreferences[j];
        Object itemIDB = prefB.getItem().getID();
        RunningAverage average = aMap.get(itemIDB);
        if (average == null && averageCount < maxEntries) {
          average = buildRunningAverage();
          aMap.put(itemIDB, average);
          averageCount++;
        }
        if (average != null) {
          average.addDatum(prefB.getValue() - prefAValue);
        }

      }
      RunningAverage itemAverage = averageItemPref.get(itemIDA);
      if (itemAverage == null) {
        itemAverage = buildRunningAverage();
        averageItemPref.put(itemIDA, itemAverage);
      }
      itemAverage.addDatum(prefAValue);
    }
    return averageCount;
  }
View Full Code Here

TOP

Related Classes of org.apache.mahout.cf.taste.impl.common.RunningAverage

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.