public void testExactSizeMatch()
 {
     SamplinglongPrimitiveIterator t = new SamplinglongPrimitiveIterator(
     countingIterator(10), 1);
     for (int i = 0; i < 10; i++) {
       Assert.True(t.MoveNext());
       Assert.AreEqual(i, (int)t.Current );
     }
     Assert.False(t.MoveNext());
 }
예제 #2
0
        public override long[] GetUserNeighborhood(long userID)
        {
            IDataModel      dataModel          = getDataModel();
            IUserSimilarity userSimilarityImpl = getUserSimilarity();

            TopItems.IEstimator <long> estimator = new Estimator(userSimilarityImpl, userID, minSimilarity);

            var userIDs = SamplinglongPrimitiveIterator.MaybeWrapIterator(dataModel.GetUserIDs(),
                                                                          getSamplingRate());

            return(TopItems.GetTopUsers(n, userIDs, null, estimator));
        }
예제 #3
0
 private void addSomeOf(FastIDSet possibleItemIDs, FastIDSet itemIDs)
 {
     if (itemIDs.Count() > maxItemsPerUser)
     {
         var it =
             new SamplinglongPrimitiveIterator(itemIDs.GetEnumerator(), (double)maxItemsPerUser / itemIDs.Count());
         while (it.MoveNext())
         {
             possibleItemIDs.Add(it.Current);
         }
     }
     else
     {
         possibleItemIDs.AddAll(itemIDs);
     }
 }
 public void testSample()
 {
     double p = 0.1;
     int n = 1000;
     double sd = Math.Sqrt(n * p * (1.0 - p));
     for (int i = 0; i < 1000; i++) {
       SamplinglongPrimitiveIterator t = new SamplinglongPrimitiveIterator(countingIterator(n), p);
       int k = 0;
       while (t.MoveNext()) {
     long v = t.Current;
     k++;
     Assert.True(v >= 0L);
     Assert.True(v < 1000L);
       }
       // Should be +/- 5 standard deviations except in about 1 out of 1.7M cases
       Assert.True(k >= 100 - 5 * sd);
       Assert.True(k <= 100 + 5 * sd);
     }
 }
예제 #5
0
        protected override FastIDSet doGetCandidateItems(long[] preferredItemIDs, IDataModel dataModel)
        {
            var preferredItemIDsIterator = ((IEnumerable <long>)preferredItemIDs).GetEnumerator();

            if (preferredItemIDs.Length > maxItems)
            {
                double samplingRate = (double)maxItems / preferredItemIDs.Length;
                log.Info("preferredItemIDs.Length {0}, samplingRate {1}", preferredItemIDs.Length, samplingRate);
                preferredItemIDsIterator =
                    new SamplinglongPrimitiveIterator(preferredItemIDsIterator, samplingRate);
            }
            FastIDSet possibleItemsIDs = new FastIDSet();

            while (preferredItemIDsIterator.MoveNext())
            {
                long             itemID = preferredItemIDsIterator.Current;
                IPreferenceArray prefs  = dataModel.GetPreferencesForItem(itemID);
                int prefsLength         = prefs.Length();
                if (prefsLength > maxUsersPerItem)
                {
                    var sampledPrefs =
                        new FixedSizeSamplingIterator <IPreference>(maxUsersPerItem, prefs.GetEnumerator());
                    while (sampledPrefs.MoveNext())
                    {
                        addSomeOf(possibleItemsIDs, dataModel.GetItemIDsFromUser(sampledPrefs.Current.GetUserID()));
                    }
                }
                else
                {
                    for (int i = 0; i < prefsLength; i++)
                    {
                        addSomeOf(possibleItemsIDs, dataModel.GetItemIDsFromUser(prefs.GetUserID(i)));
                    }
                }
            }
            possibleItemsIDs.RemoveAll(preferredItemIDs);
            return(possibleItemsIDs);
        }
        public override long[] GetUserNeighborhood(long userID)
        {
            IDataModel dataModel     = getDataModel();
            FastIDSet  neighborhood  = new FastIDSet();
            var        usersIterable = SamplinglongPrimitiveIterator.MaybeWrapIterator(dataModel
                                                                                       .GetUserIDs(), getSamplingRate());
            IUserSimilarity userSimilarityImpl = getUserSimilarity();

            while (usersIterable.MoveNext())
            {
                long otherUserID = usersIterable.Current;
                if (userID != otherUserID)
                {
                    double theSimilarity = userSimilarityImpl.UserSimilarity(userID, otherUserID);
                    if (!Double.IsNaN(theSimilarity) && theSimilarity >= threshold)
                    {
                        neighborhood.Add(otherUserID);
                    }
                }
            }

            return(neighborhood.ToArray());
        }
예제 #7
0
        public static LoadStatistics runLoad(IRecommender recommender, int howMany)
        {
            IDataModel dataModel   = recommender.GetDataModel();
            int        numUsers    = dataModel.GetNumUsers();
            double     sampleRate  = 1000.0 / numUsers;
            var        userSampler =
                SamplinglongPrimitiveIterator.MaybeWrapIterator(dataModel.GetUserIDs(), sampleRate);

            if (userSampler.MoveNext())
            {
                recommender.Recommend(userSampler.Current, howMany); // Warm up
            }
            var callables = new List <Action>();

            while (userSampler.MoveNext())
            {
                callables.Add(new LoadCallable(recommender, userSampler.Current).call);
            }
            AtomicInteger            noEstimateCounter = new AtomicInteger();
            IRunningAverageAndStdDev timing            = new FullRunningAverageAndStdDev();

            AbstractDifferenceRecommenderEvaluator.execute(callables, noEstimateCounter, timing);
            return(new LoadStatistics(timing));
        }
 private void addSomeOf(FastIDSet possibleItemIDs, FastIDSet itemIDs) {
   if (itemIDs.Count() > maxItemsPerUser) {
     var it =
         new SamplinglongPrimitiveIterator(itemIDs.GetEnumerator(), (double) maxItemsPerUser / itemIDs.Count() );
     while (it.MoveNext()) {
       possibleItemIDs.Add(it.Current);
     }
   } else {
     possibleItemIDs.AddAll(itemIDs);
   }
 }
  protected override FastIDSet doGetCandidateItems(long[] preferredItemIDs, IDataModel dataModel) {
    var preferredItemIDsIterator = ((IEnumerable<long>)preferredItemIDs).GetEnumerator();
    if (preferredItemIDs.Length > maxItems) {
      double samplingRate = (double) maxItems / preferredItemIDs.Length;
      log.Info("preferredItemIDs.Length {0}, samplingRate {1}", preferredItemIDs.Length, samplingRate);
      preferredItemIDsIterator = 
          new SamplinglongPrimitiveIterator(preferredItemIDsIterator, samplingRate);
    }
    FastIDSet possibleItemsIDs = new FastIDSet();
    while (preferredItemIDsIterator.MoveNext()) {
      long itemID = preferredItemIDsIterator.Current;
      IPreferenceArray prefs = dataModel.GetPreferencesForItem(itemID);
      int prefsLength = prefs.Length();
	  if (prefsLength > maxUsersPerItem) {
        var sampledPrefs =
			new FixedSizeSamplingIterator<IPreference>(maxUsersPerItem, prefs.GetEnumerator());
        while (sampledPrefs.MoveNext()) {
          addSomeOf(possibleItemsIDs, dataModel.GetItemIDsFromUser(sampledPrefs.Current.GetUserID()));
        }
      } else {
        for (int i = 0; i < prefsLength; i++) {
          addSomeOf(possibleItemsIDs, dataModel.GetItemIDsFromUser(prefs.GetUserID(i)));
        }
      }
    }
    possibleItemsIDs.RemoveAll(preferredItemIDs);
    return possibleItemsIDs;
  }
 public void testSmallInput()
 {
     SamplinglongPrimitiveIterator t = new SamplinglongPrimitiveIterator(
     countingIterator(1), 0.9999);
     Assert.True(t.MoveNext());
     Assert.AreEqual(0L, t.Current);
     Assert.False(t.MoveNext());
 }