public ArticleComparer(IArticleProvider articleProvider, ISimilarityCalculator similarityCalculator, IArticleProcessor articleProcessor) { _articleProvider = articleProvider; _similarityCalculator = similarityCalculator; _articleProcessor = articleProcessor; }
private void CalculateSimilarities(ISolverResult solverResult, ISimilarityCalculator similarityCalculator) { foreach (var strategy in _calculatedSimilarities) { SimilairityValues[$"{strategy.GetType().Name}|{similarityCalculator.GetType().Name}"] = similarityCalculator.CalculatePathsSimilarities(strategy, solverResult) .Zip(solverResult.Paths, (similarity, path) => new SimilaritySolverResult(similarity, path.Cost)) .ToList(); } }
static void Main(string[] args) { calculator = new PearsonCoefficient(); predictor = new Predictor(calculator); int k = 3; float threshold = 0.35f; //Dictionary<int, Vector> vectors = DataParser.DataToVectors(DataParser.ParseData(USER_DATA)); //PrettyPrint(vectors); //Console.WriteLine(); //Console.WriteLine("Euclidean: {0}", new EuclideanSimilarity().CalculateSimilarity(vectors[3], vectors[4])); //Console.WriteLine("Manhattan: {0}", new ManhattanSimilary().CalculateSimilarity(vectors[3], vectors[4])); //Console.WriteLine("Pearson: {0}", new PearsonCoefficient().CalculateSimilarity(vectors[3], vectors[4])); //Console.WriteLine("Cosine: {0}", new CosineSimilarity().CalculateSimilarity(vectors[3], vectors[4])); //Console.Read(); //int targetUser = 7; //int[] idsToPredict = new int[] { 101, 103 }; //List<ArticleRating> results = predictor.PredictRatings(targetUser, k, threshold, vectors, idsToPredict); //PrettyPrint(targetUser, results); //Console.WriteLine(); //int targetUser = 4; //int[] idsToPredict = new int[] { 101 }; //List<ArticleRating> results = predictor.PredictRatings(targetUser, k, threshold, vectors, idsToPredict); //PrettyPrint(targetUser, results); Dictionary <int, Vector> vectors = DataParser.DataToVectors(DataParser.ParseData(MOVIELENS_DATA)); int targetUser = 186; int n = 8; List <ArticleRating> topNratings = predictor.GetTopNpredictions(n, predictor.PredictRatings(targetUser, k, threshold, vectors, DataParser.ids.ToArray())); PrettyPrint(targetUser, topNratings); Console.Read(); }
public static List <Record> NearestNeighbors(int targetUser, Dictionary <int, Vector> dataSet, int k, float threshold, ISimilarityCalculator similarityCalculator) { runner = new UserItemRunner(similarityCalculator); List <Record> nearestNeighbors = new List <Record>(); int n = 0; for (int i = 1; i <= dataSet.Count; i++) { if (i != targetUser) { Record r = new Record(dataSet[i], runner.CalculateSimilarity(dataSet[i], dataSet[targetUser])); if (r.Similarity > threshold) { if (n < k) { nearestNeighbors.Add(r); n++; } else { if (r.V.NumberOfRatings > dataSet[targetUser].NumberOfRatings) { nearestNeighbors.Remove(nearestNeighbors.OrderBy(x => x.Similarity).First()); nearestNeighbors.Add(r); threshold = nearestNeighbors.Min(x => x.Similarity); } } } } } return(nearestNeighbors); }
public SimilarityCalculatorTimer(ISimilarityCalculator calculator, StreamWriter streamWriter) { Calculator = calculator; StreamWriter = streamWriter; }
public UserItemRunner(ISimilarityCalculator similarityCalculator) { this.similarityCalculator = similarityCalculator; }
public Predictor(ISimilarityCalculator similarityCalcluator) { SimilarityCalculator = similarityCalcluator; }