Beispiel #1
0
        private AccuracyNrec CalculateAccuracy(List <RecommendedItems> recommendations, IList <UserItemPurchase> purchases)
        {
            IList <UserItemlist> recommendations5 = recommendations
                                                    .Select(a => new UserItemlist
            {
                UserId = a.User,
                Items  = a.Items.OrderByDescending(b => b.Rating).Take(5).Select(c => c.ItemId).ToList()
            }).ToList();

            IList <UserItemlist> recommendations10 = recommendations
                                                     .Select(a => new UserItemlist
            {
                UserId = a.User,
                Items  = a.Items.OrderByDescending(b => b.Rating).Take(10).Select(c => c.ItemId).ToList()
            }).ToList();

            IList <UserItemlist> recommendations20 = recommendations
                                                     .Select(a => new UserItemlist
            {
                UserId = a.User,
                Items  = a.Items.OrderByDescending(b => b.Rating).Take(20).Select(c => c.ItemId).ToList()
            }).ToList();

            IList <UserItemlist> recommendations50 = recommendations
                                                     .Select(a => new UserItemlist
            {
                UserId = a.User,
                Items  = a.Items.OrderByDescending(b => b.Rating).Take(50).Select(c => c.ItemId).ToList()
            }).ToList();

            AccuracyNrec  accuracyNrec  = new AccuracyNrec();
            RecEvaluation recEvaluation = new RecEvaluation();

            accuracyNrec.Precicion5           = recEvaluation.Precision(recommendations5, purchases);
            accuracyNrec.Recall5              = recEvaluation.Recall(recommendations5, purchases);
            accuracyNrec.F15                  = recEvaluation.F1(accuracyNrec.Precicion5, accuracyNrec.Recall5);
            accuracyNrec.RecallwithFrequency5 = recEvaluation.RecallWithFrequency(recommendations5, purchases);
            accuracyNrec.F1withFrequency5     = recEvaluation.F1(accuracyNrec.Precicion5, accuracyNrec.RecallwithFrequency5);

            accuracyNrec.Precicion10           = recEvaluation.Precision(recommendations10, purchases);
            accuracyNrec.Recall10              = recEvaluation.Recall(recommendations10, purchases);
            accuracyNrec.F110                  = recEvaluation.F1(accuracyNrec.Precicion10, accuracyNrec.Recall10);
            accuracyNrec.RecallwithFrequency10 = recEvaluation.RecallWithFrequency(recommendations10, purchases);
            accuracyNrec.F1withFrequency10     = recEvaluation.F1(accuracyNrec.Precicion10, accuracyNrec.RecallwithFrequency10);

            accuracyNrec.Precicion20           = recEvaluation.Precision(recommendations20, purchases);
            accuracyNrec.Recall20              = recEvaluation.Recall(recommendations20, purchases);
            accuracyNrec.F120                  = recEvaluation.F1(accuracyNrec.Precicion20, accuracyNrec.Recall20);
            accuracyNrec.RecallwithFrequency20 = recEvaluation.RecallWithFrequency(recommendations20, purchases);
            accuracyNrec.F1withFrequency20     = recEvaluation.F1(accuracyNrec.Precicion20, accuracyNrec.RecallwithFrequency20);

            accuracyNrec.Precicion50           = recEvaluation.Precision(recommendations50, purchases);
            accuracyNrec.Recall50              = recEvaluation.Recall(recommendations50, purchases);
            accuracyNrec.F150                  = recEvaluation.F1(accuracyNrec.Precicion50, accuracyNrec.Recall50);
            accuracyNrec.RecallwithFrequency50 = recEvaluation.RecallWithFrequency(recommendations50, purchases);
            accuracyNrec.F1withFrequency50     = recEvaluation.F1(accuracyNrec.Precicion50, accuracyNrec.RecallwithFrequency50);

            return(accuracyNrec);
        }
        public IActionResult EvaluationResults(int recommendationNumber, DateTime trainStartDate, DateTime trainEndDate, DateTime testStartDate, DateTime testEndDate)
        {
            string recType   = "PurchaseFrequency11Month";
            int    recInfoid = _dbContext.RecommendationInfo.First(a => string.Equals(a.RecName, recType)).RecId;

            IQueryable <UkRetailOriginalSales> ukRetailOriginalSales = _dbContext.UkRetailOriginalSales;
            IQueryable <Recommendation>        recommendations       = _dbContext.Recommendation.
                                                                       Where(a => a.RecommendationInfoId == recInfoid);

            RecEvaluation recEvaluation = new RecEvaluation();
            AccuracyNrec  accuracyNrec  = recEvaluation.RecEvaluate(ukRetailOriginalSales, recommendations, recType, trainStartDate, trainEndDate, testStartDate, testEndDate);

            return(View(accuracyNrec));
        }