private float doEstimatePreference(long itemID)
 {
     lock (this)
     {
         RunningAverage average = this.itemAverages.get(itemID);
         return((average == null) ? float.NaN : ((float)average.getAverage()));
     }
 }
Beispiel #2
0
        private float doEstimatePreference(long userID, long itemID)
        {
            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)
                        {
                            var raaStdDev = averageDiff as RunningAverageAndStdDev;
                            if (raaStdDev != null)
                            {
                                double stdev = raaStdDev.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 * (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));
            }
        }
 private float doEstimatePreference(long userID, long itemID)
 {
     lock (this)
     {
         RunningAverage average = this.itemAverages.get(itemID);
         if (average == null)
         {
             return(float.NaN);
         }
         RunningAverage average2 = this.userAverages.get(userID);
         if (average2 == null)
         {
             return(float.NaN);
         }
         double num = average2.getAverage() - this.overallAveragePrefValue.getAverage();
         return((float)(average.getAverage() + num));
     }
 }