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()); }
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)); }
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); } }
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()); }
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()); }