コード例 #1
0
        public static void evaluate(Recommender recommender, DataModel model, int samples, RunningAverage tracker, string tag)
        {
            printHeader();
            IEnumerator <long> enumerator = recommender.getDataModel().getUserIDs();

            while (enumerator.MoveNext())
            {
                long current = enumerator.Current;
                List <RecommendedItem> items = recommender.recommend(current, model.getNumItems());
                PreferenceArray        prefs = model.getPreferencesFromUser(current);
                prefs.sortByValueReversed();
                FastIDSet modelSet = new FastIDSet();
                long      num2     = setBits(modelSet, items, samples);
                FastIDSet set2     = new FastIDSet();
                num2 = Math.Max(num2, setBits(set2, prefs, samples));
                int max = Math.Min(mask(modelSet, set2, num2), samples);
                if (max >= 2)
                {
                    long[] itemsL = getCommonItems(modelSet, items, max);
                    long[] itemsR = getCommonItems(modelSet, prefs, max);
                    double datum  = scoreCommonSubset(tag, current, samples, max, itemsL, itemsR);
                    tracker.addDatum(datum);
                }
            }
        }
コード例 #2
0
        public void addItemPref(long userID, long itemIDA, float prefValue)
        {
            PreferenceArray userPreferences = dataModel.getPreferencesFromUser(userID);

            try
            {
                buildAverageDiffsLock.EnterWriteLock();

                FastByIDMap <RunningAverage> aMap = averageDiffs.get(itemIDA);
                if (aMap == null)
                {
                    aMap = new FastByIDMap <RunningAverage>();
                    averageDiffs.put(itemIDA, aMap);
                }
                int length = userPreferences.length();
                for (int i = 0; i < length; i++)
                {
                    long  itemIDB = userPreferences.getItemID(i);
                    float bValue  = userPreferences.getValue(i);
                    if (itemIDA < itemIDB)
                    {
                        RunningAverage average = aMap.get(itemIDB);
                        if (average == null)
                        {
                            average = buildRunningAverage();
                            aMap.put(itemIDB, average);
                        }
                        average.addDatum(bValue - prefValue);
                    }
                    else
                    {
                        FastByIDMap <RunningAverage> bMap = averageDiffs.get(itemIDB);
                        if (bMap == null)
                        {
                            bMap = new FastByIDMap <RunningAverage>();
                            averageDiffs.put(itemIDB, bMap);
                        }
                        RunningAverage average = bMap.get(itemIDA);
                        if (average == null)
                        {
                            average = buildRunningAverage();
                            bMap.put(itemIDA, average);
                        }
                        average.addDatum(prefValue - bValue);
                    }
                }
            }
            finally
            {
                buildAverageDiffsLock.ExitWriteLock();
            }
        }
コード例 #3
0
        private long processOneUser(long averageCount, long userID)
        {
            log.debug("Processing prefs for user {}", userID);
            // Save off prefs for the life of this loop iteration
            PreferenceArray userPreferences = dataModel.getPreferencesFromUser(userID);
            int             length          = userPreferences.length();

            for (int i = 0; i < length - 1; i++)
            {
                float prefAValue = userPreferences.getValue(i);
                long  itemIDA    = userPreferences.getItemID(i);
                FastByIDMap <RunningAverage> aMap = averageDiffs.get(itemIDA);
                if (aMap == null)
                {
                    aMap = new FastByIDMap <RunningAverage>();
                    averageDiffs.put(itemIDA, aMap);
                }
                for (int j = i + 1; j < length; j++)
                {
                    // This is a performance-critical block
                    long           itemIDB = userPreferences.getItemID(j);
                    RunningAverage average = aMap.get(itemIDB);
                    if (average == null && averageCount < maxEntries)
                    {
                        average = buildRunningAverage();
                        aMap.put(itemIDB, average);
                        averageCount++;
                    }
                    if (average != null)
                    {
                        average.addDatum(userPreferences.getValue(j) - prefAValue);
                    }
                }
                RunningAverage itemAverage = averageItemPref.get(itemIDA);
                if (itemAverage == null)
                {
                    itemAverage = buildRunningAverage();
                    averageItemPref.put(itemIDA, itemAverage);
                }
                itemAverage.addDatum(prefAValue);
            }
            return(averageCount);
        }
コード例 #4
0
        public static void evaluate(Recommender recommender1, Recommender recommender2, int samples, RunningAverage tracker, string tag)
        {
            printHeader();
            IEnumerator <long> enumerator = recommender1.getDataModel().getUserIDs();

            while (enumerator.MoveNext())
            {
                long current = enumerator.Current;
                List <RecommendedItem> items = recommender1.recommend(current, samples);
                List <RecommendedItem> list2 = recommender2.recommend(current, samples);
                FastIDSet modelSet           = new FastIDSet();
                long      num2 = setBits(modelSet, items, samples);
                FastIDSet set2 = new FastIDSet();
                num2 = Math.Max(num2, setBits(set2, list2, samples));
                int max = Math.Min(mask(modelSet, set2, num2), samples);
                if (max >= 2)
                {
                    long[] itemsL = getCommonItems(modelSet, items, max);
                    long[] itemsR = getCommonItems(modelSet, list2, max);
                    double datum  = scoreCommonSubset(tag, current, samples, max, itemsL, itemsR);
                    tracker.addDatum(datum);
                }
            }
        }