internal DataModelSimilaritiesIterator(UserSimilarity otherSimilarity, long[] itemIDs) { this.otherSimilarity = otherSimilarity; this.itemIDs = itemIDs; this.i = 0; this.itemID1 = itemIDs[0]; this.j = 1; }
public GenericUserSimilarity(UserSimilarity otherSimilarity, DataModel dataModel, int maxToKeep) { this.similarityMaps = new FastByIDMap <FastByIDMap <double> >(); long[] itemIDs = longIteratorToList(dataModel.getUserIDs()); IEnumerator <UserUserSimilarity> allSimilarities = new DataModelSimilaritiesIterator(otherSimilarity, itemIDs); this.initSimilarityMaps(TopItems.getTopUserUserSimilarities(maxToKeep, allSimilarities).GetEnumerator()); }
public NearestNUserNeighborhood(int n, double minSimilarity, UserSimilarity userSimilarity, DataModel dataModel, double samplingRate) : base(userSimilarity, dataModel, samplingRate) { int num = dataModel.getNumUsers(); this.n = (n > num) ? num : n; this.minSimilarity = minSimilarity; }
public AbstractUserNeighborhood(UserSimilarity userSimilarity, DataModel dataModel, double samplingRate) { this.userSimilarity = userSimilarity; this.dataModel = dataModel; this.samplingRate = samplingRate; this.refreshHelper = new RefreshHelper(null); this.refreshHelper.addDependency(this.dataModel); this.refreshHelper.addDependency(this.userSimilarity); }
public CachingUserSimilarity(UserSimilarity similarity, int maxCacheSize) { Action refreshRunnable = null; this.similarity = similarity; this.similarityCache = new Cache <Tuple <long, long>, double>(new SimilarityRetriever(similarity), maxCacheSize); if (refreshRunnable == null) { refreshRunnable = () => this.similarityCache.clear(); } this.refreshHelper = new RefreshHelper(refreshRunnable); this.refreshHelper.addDependency(similarity); }
/** * <p> * Constructs a based on the given {@link UserSimilarity}. By * setting {@code samplingRate} to a value less than 1.0, this implementation will only examine that * fraction of all user-user similarities between two clusters, increasing performance at the expense of * accuracy. * </p> */ public FarthestNeighborClusterSimilarity(UserSimilarity similarity, double samplingRate) { if (similarity == null) { throw new Exception("similarity is null"); } //Preconditions.checkArgument(similarity != null, "similarity is null"); //Preconditions.checkArgument(!Double.IsNaN(samplingRate) && samplingRate > 0.0 && samplingRate <= 1.0, // "samplingRate is invalid: %.4f", samplingRate); if (!(!Double.IsNaN(samplingRate) && samplingRate > 0.0 && samplingRate <= 1.0)) { throw new Exception("samplingRate is invalid"); } this.similarity = similarity; this.samplingRate = samplingRate; }
public GenericUserBasedRecommender(DataModel dataModel, UserNeighborhood neighborhood, UserSimilarity similarity) : base(dataModel) { Action refreshRunnable = null; this.neighborhood = neighborhood; this.similarity = similarity; if (refreshRunnable == null) { refreshRunnable = () => this.capper = this.buildCapper(); } this.refreshHelper = new RefreshHelper(refreshRunnable); this.refreshHelper.addDependency(dataModel); this.refreshHelper.addDependency(similarity); this.refreshHelper.addDependency(neighborhood); this.capper = this.buildCapper(); }
protected override float doEstimatePreference(long theUserID, long[] theNeighborhood, long itemID) { if (theNeighborhood.Length == 0) { return(float.NaN); } DataModel model = this.getDataModel(); UserSimilarity similarity = base.getSimilarity(); float num = 0f; bool flag = false; foreach (long num2 in theNeighborhood) { if ((num2 != theUserID) && model.getPreferenceValue(num2, itemID).HasValue) { flag = true; num += (float)similarity.userSimilarity(theUserID, num2); } } return(flag ? num : float.NaN); }
public override long[] getUserNeighborhood(long userID) { DataModel model = this.getDataModel(); FastIDSet set = new FastIDSet(); IEnumerator <long> enumerator = SamplingLongPrimitiveIterator.maybeWrapIterator(model.getUserIDs(), this.getSamplingRate()); UserSimilarity similarity = this.getUserSimilarity(); while (enumerator.MoveNext()) { long current = enumerator.Current; if (userID != current) { double d = similarity.userSimilarity(userID, current); if (!(double.IsNaN(d) || (d < this.threshold))) { set.add(current); } } } return(set.toArray()); }
//零数据情况下建立用户相似度数据集 public void CountSimilarity() { IEnumerable <User> users = db.Users; foreach (var user in users) { IList <SimilarityMap> smilarityMap = new List <SimilarityMap>(); UserExtensionInfo currentuserExtensionInfo = db.UserExtensionInfos.Single(x => x.UserId == user.Id); IEnumerable <int> otherUsersId = SelectOtherUsers(user); foreach (var otherUserid in otherUsersId) //其他用户 { UserExtensionInfo otherExtensionInfo = db.UserExtensionInfos.Single(x => x.UserId == otherUserid); int similarityDegree = AcquireSimilarityBetween(currentuserExtensionInfo, otherExtensionInfo); SimilarityMap newsimilarityMap = new SimilarityMap { UserId = otherUserid, Similarity = similarityDegree }; smilarityMap.Add(newsimilarityMap); } IEnumerable <SimilarityMap> similarity = smilarityMap.OrderByDescending(x => x.Similarity).Take(SimilarityUserSettingCount); int priority = 1; foreach (var similarityMap in similarity) { UserSimilarity userSimilarity = new UserSimilarity { UserId = user.Id, SimilarUserId = similarityMap.UserId, Priority = priority }; db.UserSimilarities.Add(userSimilarity); priority++; } } db.SaveChanges(); }
public ThresholdUserNeighborhood(double threshold, UserSimilarity userSimilarity, DataModel dataModel, double samplingRate) : base(userSimilarity, dataModel, samplingRate) { this.threshold = threshold; }
internal SimilarityRetriever(UserSimilarity similarity) { this.similarity = similarity; }
internal Estimator(UserSimilarity userSimilarityImpl, long theUserID, double minSim) { this.userSimilarityImpl = userSimilarityImpl; this.theUserID = theUserID; this.minSim = minSim; }
public CachingUserSimilarity(UserSimilarity similarity, DataModel dataModel) : this(similarity, dataModel.getNumUsers()) { }
internal MostSimilarEstimator(long toUserID, UserSimilarity similarity, Rescorer <Tuple <long, long> > rescorer) { this.toUserID = toUserID; this.similarity = similarity; this.rescorer = rescorer; }
public NearestNUserNeighborhood(int n, double minSimilarity, UserSimilarity userSimilarity, DataModel dataModel) : this(n, minSimilarity, userSimilarity, dataModel, 1.0) { }
public NearestNUserNeighborhood(int n, UserSimilarity userSimilarity, DataModel dataModel) : this(n, double.NegativeInfinity, userSimilarity, dataModel, 1.0) { }
/** * <p> * Constructs a based on the given {@link UserSimilarity}. All * user-user similarities are examined. * </p> */ public FarthestNeighborClusterSimilarity(UserSimilarity similarity) : this(similarity, 1.0) { }
public GenericUserSimilarity(UserSimilarity otherSimilarity, DataModel dataModel) { this.similarityMaps = new FastByIDMap <FastByIDMap <double> >(); long[] itemIDs = longIteratorToList(dataModel.getUserIDs()); this.initSimilarityMaps(new DataModelSimilaritiesIterator(otherSimilarity, itemIDs)); }
public GenericBooleanPrefUserBasedRecommender(DataModel dataModel, UserNeighborhood neighborhood, UserSimilarity similarity) : base(dataModel, neighborhood, similarity) { }
public ThresholdUserNeighborhood(double threshold, UserSimilarity userSimilarity, DataModel dataModel) : this(threshold, userSimilarity, dataModel, 1.0) { }