Exemple #1
0
 /// @param n neighborhood size; capped at the number of users in the data model
 /// @param minSimilarity minimal similarity required for neighbors
 /// @throws IllegalArgumentException
 ///           if {@code n < 1}, or userSimilarity or dataModel are {@code null}
 public NearestNUserNeighborhood(int n,
                                 double minSimilarity,
                                 IUserSimilarity userSimilarity,
                                 IDataModel dataModel) :
     this(n, minSimilarity, userSimilarity, dataModel, 1.0)
 {
 }
Exemple #2
0
 internal DataModelSimilaritiesIterator(IUserSimilarity otherSimilarity, long[] itemIDs)
 {
     this.otherSimilarity = otherSimilarity;
     this.itemIDs         = itemIDs;
     i       = 0;
     itemID1 = itemIDs[0];
     j       = 1;
 }
   /// @param threshold
   ///          similarity threshold
   /// @param userSimilarity
   ///          similarity metric
   /// @param dataModel
   ///          data model
   /// @param samplingRate
   ///          percentage of users to consider when building neighborhood -- decrease to trade quality for
   ///          performance
   /// @throws IllegalArgumentException
   ///           if threshold or samplingRate is {@link Double#NaN}, or if samplingRate is not positive and less
   ///           than or equal to 1.0, or if userSimilarity or dataModel are {@code null}
  public ThresholdUserNeighborhood(double threshold,
                                   IUserSimilarity userSimilarity,
                                   IDataModel dataModel,
								   double samplingRate)
	  : base(userSimilarity, dataModel, samplingRate) {
    
    //Preconditions.checkArgument(!Double.isNaN(threshold), "threshold must not be NaN");
    this.threshold = threshold;
  }
 /// @param threshold
 ///          similarity threshold
 /// @param userSimilarity
 ///          similarity metric
 /// @param dataModel
 ///          data model
 /// @param samplingRate
 ///          percentage of users to consider when building neighborhood -- decrease to trade quality for
 ///          performance
 /// @throws IllegalArgumentException
 ///           if threshold or samplingRate is {@link Double#NaN}, or if samplingRate is not positive and less
 ///           than or equal to 1.0, or if userSimilarity or dataModel are {@code null}
 public ThresholdUserNeighborhood(double threshold,
                                  IUserSimilarity userSimilarity,
                                  IDataModel dataModel,
                                  double samplingRate)
     : base(userSimilarity, dataModel, samplingRate)
 {
     //Preconditions.checkArgument(!Double.isNaN(threshold), "threshold must not be NaN");
     this.threshold = threshold;
 }
Exemple #5
0
        public GenericUserSimilarity(IUserSimilarity otherSimilarity,
                                     IDataModel dataModel,
                                     int maxToKeep)
        {
            long[] userIDs = longIteratorToList(dataModel.GetUserIDs());
            IEnumerator <UserUserSimilarity> it = new DataModelSimilaritiesIterator(otherSimilarity, userIDs);
            var keptSimilarities = TopItems.GetTopUserUserSimilarities(maxToKeep, it);

            initSimilarityMaps(keptSimilarities.GetEnumerator());
        }
 /// Creates this on top of the given {@link UserSimilarity}.
 /// The cache size is capped by the given size.
 public CachingUserSimilarity(IUserSimilarity similarity, int maxCacheSize)
 {
     //Preconditions.checkArgument(similarity != null, "similarity is null");
     this.similarity      = similarity;
     this.similarityCache = new Cache <Tuple <long, long>, Double>(new SimilarityRetriever(similarity), maxCacheSize);
     this.refreshHelper   = new RefreshHelper(() => {
         similarityCache.Clear();
     });
     refreshHelper.AddDependency(similarity);
 }
 public AbstractUserNeighborhood(IUserSimilarity userSimilarity, IDataModel dataModel, double samplingRate) {
   //Preconditions.checkArgument(userSimilarity != null, "userSimilarity is null");
   //Preconditions.checkArgument(dataModel != null, "dataModel is null");
   //Preconditions.checkArgument(samplingRate > 0.0 && samplingRate <= 1.0, "samplingRate must be in (0,1]");
   this.userSimilarity = userSimilarity;
   this.dataModel = dataModel;
   this.samplingRate = samplingRate;
   this.refreshHelper = new RefreshHelper(null);
   this.refreshHelper.AddDependency(this.dataModel);
   this.refreshHelper.AddDependency(this.userSimilarity);
 }
Exemple #8
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));
        }
Exemple #9
0
 public AbstractUserNeighborhood(IUserSimilarity userSimilarity, IDataModel dataModel, double samplingRate)
 {
     //Preconditions.checkArgument(userSimilarity != null, "userSimilarity is null");
     //Preconditions.checkArgument(dataModel != null, "dataModel is null");
     //Preconditions.checkArgument(samplingRate > 0.0 && samplingRate <= 1.0, "samplingRate must be in (0,1]");
     this.userSimilarity = userSimilarity;
     this.dataModel      = dataModel;
     this.samplingRate   = samplingRate;
     this.refreshHelper  = new RefreshHelper(null);
     this.refreshHelper.AddDependency(this.dataModel);
     this.refreshHelper.AddDependency(this.userSimilarity);
 }
Exemple #10
0
        /// @param n neighborhood size; capped at the number of users in the data model
        /// @param minSimilarity minimal similarity required for neighbors
        /// @param samplingRate percentage of users to consider when building neighborhood -- decrease to trade quality for
        ///   performance
        /// @throws IllegalArgumentException
        ///           if {@code n < 1} or samplingRate is NaN or not in (0,1], or userSimilarity or dataModel are
        ///           {@code null}
        public NearestNUserNeighborhood(int n,
                                        double minSimilarity,
                                        IUserSimilarity userSimilarity,
                                        IDataModel dataModel,
                                        double samplingRate)
            : base(userSimilarity, dataModel, samplingRate)
        {
            //Preconditions.checkArgument(n >= 1, "n must be at least 1");
            int numUsers = dataModel.GetNumUsers();

            this.n             = n > numUsers ? numUsers : n;
            this.minSimilarity = minSimilarity;
        }
Exemple #11
0
 public GenericUserBasedRecommender(IDataModel dataModel,
                                    IUserNeighborhood neighborhood,
                                    IUserSimilarity similarity) : base(dataModel)
 {
     //Preconditions.checkArgument(neighborhood != null, "neighborhood is null");
     this.neighborhood  = neighborhood;
     this.similarity    = similarity;
     this.refreshHelper = new RefreshHelper(() => {
         capper = buildCapper();
     });
     refreshHelper.AddDependency(dataModel);
     refreshHelper.AddDependency(similarity);
     refreshHelper.AddDependency(neighborhood);
     capper = buildCapper();
 }
Exemple #12
0
        /// This computation is in a technical sense, wrong, since in the domain of "bool preference users" where
        /// all preference values are 1, this method should only ever return 1.0 or NaN. This isn't terribly useful
        /// however since it means results can't be ranked by preference value (all are 1). So instead this returns a
        /// sum of similarities to any other user in the neighborhood who has also rated the item.
        protected override float doEstimatePreference(long theUserID, long[] theNeighborhood, long itemID)
        {
            if (theNeighborhood.Length == 0)
            {
                return(float.NaN);
            }
            IDataModel      dataModel       = GetDataModel();
            IUserSimilarity similarity      = getSimilarity();
            float           totalSimilarity = 0.0f;
            bool            foundAPref      = false;

            foreach (long userID in theNeighborhood)
            {
                // See GenericItemBasedRecommender.doEstimatePreference() too
                if (userID != theUserID && dataModel.GetPreferenceValue(userID, itemID) != null)
                {
                    foundAPref       = true;
                    totalSimilarity += (float)similarity.UserSimilarity(theUserID, userID);
                }
            }
            return(foundAPref ? totalSimilarity : float.NaN);
        }
        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());
        }
   /// @param threshold
   ///          similarity threshold
   /// @param userSimilarity
   ///          similarity metric
   /// @param dataModel
   ///          data model
   /// @throws IllegalArgumentException
   ///           if threshold is {@link Double#NaN}, or if samplingRate is not positive and less than or equal
   ///           to 1.0, or if userSimilarity or dataModel are {@code null}
  public ThresholdUserNeighborhood(double threshold, IUserSimilarity userSimilarity, IDataModel dataModel) :
	  this(threshold, userSimilarity, dataModel, 1.0) {
    
  }
Exemple #15
0
 /// @param n neighborhood size; capped at the number of users in the data model
 /// @throws IllegalArgumentException
 ///           if {@code n < 1}, or userSimilarity or dataModel are {@code null}
 public NearestNUserNeighborhood(int n, IUserSimilarity userSimilarity, IDataModel dataModel) :
     this(n, Double.NegativeInfinity, userSimilarity, dataModel, 1.0)
 {
 }
Exemple #16
0
 internal Estimator(IUserSimilarity userSimilarityImpl, long theUserID, double minSim)
 {
     this.userSimilarityImpl = userSimilarityImpl;
     this.theUserID          = theUserID;
     this.minSim             = minSim;
 }
 internal SimilarityRetriever(IUserSimilarity similarity)
 {
     this.similarity = similarity;
 }
  public GenericBooleanPrefUserBasedRecommender(IDataModel dataModel,
                                                IUserNeighborhood neighborhood,
												IUserSimilarity similarity)
		: base(dataModel, neighborhood, similarity) {
  }
 /// Creates this on top of the given {@link UserSimilarity}.
 /// The cache is sized according to properties of the given {@link DataModel}.
 public CachingUserSimilarity(IUserSimilarity similarity, IDataModel dataModel) : this(similarity, dataModel.GetNumUsers())
 {
 }
Exemple #20
0
 public GenericBooleanPrefUserBasedRecommender(IDataModel dataModel,
                                               IUserNeighborhood neighborhood,
                                               IUserSimilarity similarity)
     : base(dataModel, neighborhood, similarity)
 {
 }
 /// @param threshold
 ///          similarity threshold
 /// @param userSimilarity
 ///          similarity metric
 /// @param dataModel
 ///          data model
 /// @throws IllegalArgumentException
 ///           if threshold is {@link Double#NaN}, or if samplingRate is not positive and less than or equal
 ///           to 1.0, or if userSimilarity or dataModel are {@code null}
 public ThresholdUserNeighborhood(double threshold, IUserSimilarity userSimilarity, IDataModel dataModel) :
     this(threshold, userSimilarity, dataModel, 1.0)
 {
 }
Exemple #22
0
 public GenericUserSimilarity(IUserSimilarity otherSimilarity, IDataModel dataModel)
 {
     long[] userIDs = longIteratorToList(dataModel.GetUserIDs());
     initSimilarityMaps(new DataModelSimilaritiesIterator(otherSimilarity, userIDs));
 }
Exemple #23
0
 internal MostSimilarEstimator(long toUserID, IUserSimilarity similarity, IRescorer <Tuple <long, long> > rescorer)
 {
     this.toUserID   = toUserID;
     this.similarity = similarity;
     this.rescorer   = rescorer;
 }