public double Estimate(long itemID) { IRunningAverage average = new FullRunningAverage(); double[] similarities = similarity.ItemSimilarities(itemID, toItemIDs); for (int i = 0; i < toItemIDs.Length; i++) { long toItemID = toItemIDs[i]; Tuple <long, long> pair = new Tuple <long, long>(toItemID, itemID); if (rescorer != null && rescorer.IsFiltered(pair)) { continue; } double estimate = similarities[i]; if (rescorer != null) { estimate = rescorer.Rescore(pair, estimate); } if (excludeItemIfNotSimilarToAll || !Double.IsNaN(estimate)) { average.AddDatum(estimate); } } double averageEstimate = average.GetAverage(); return(averageEstimate == 0 ? Double.NaN : averageEstimate); }
public double Estimate(long itemID) { Tuple <long, long> pair = new Tuple <long, long>(toItemID, itemID); if (rescorer != null && rescorer.IsFiltered(pair)) { return(Double.NaN); } double originalEstimate = similarity.ItemSimilarity(toItemID, itemID); return(rescorer == null ? originalEstimate : rescorer.Rescore(pair, originalEstimate)); }
public double Estimate(long userID) { // Don't consider the user itself as a possible most similar user if (userID == toUserID) { return(Double.NaN); } if (rescorer == null) { return(similarity.UserSimilarity(toUserID, userID)); } else { Tuple <long, long> pair = new Tuple <long, long>(toUserID, userID); if (rescorer.IsFiltered(pair)) { return(Double.NaN); } double originalEstimate = similarity.UserSimilarity(toUserID, userID); return(rescorer.Rescore(pair, originalEstimate)); } }