Exemplo n.º 1
0
 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;
 }
Exemplo n.º 6
0
 public UserItemRunner(ISimilarityCalculator similarityCalculator)
 {
     this.similarityCalculator = similarityCalculator;
 }
 public Predictor(ISimilarityCalculator similarityCalcluator)
 {
     SimilarityCalculator = similarityCalcluator;
 }