/// <summary>
            /// Utility method to extract the recommended item from a xml recommendation result
            /// </summary>
            /// <param name="nodeList">the xml element containing the recommended items.</param>
            /// <returns>a collection of recommended item or empty list id sh</returns>
            internal static IEnumerable <RecommendedItem> ExtractRecommendedItems(XmlNodeList nodeList)
            {
                var recoList = new List <RecommendedItem>();

                foreach (var node in (nodeList))
                {
                    var item = new RecommendedItem();
                    //cycle through the recommended items
                    foreach (var child in ((XmlElement)node).ChildNodes)
                    {
                        //cycle through properties
                        var nodeName = ((XmlNode)child).LocalName;
                        switch (nodeName)
                        {
                        case "Id":
                            item.Id = ((XmlNode)child).InnerText;
                            break;

                        case "Name":
                            item.Name = ((XmlNode)child).InnerText;
                            break;

                        case "Rating":
                            item.Rating = ((XmlNode)child).InnerText;
                            break;

                        case "Reasoning":
                            item.Reasoning = ((XmlNode)child).InnerText;
                            break;
                        }
                    }
                    recoList.Add(item);
                }
                return(recoList);
            }
Esempio n. 2
0
        public override bool Equals(object o)
        {
            if (!(o is GenericRecommendedItem))
            {
                return(false);
            }
            RecommendedItem item = (RecommendedItem)o;

            return((this.itemID == item.getItemID()) && (this.value == item.getValue()));
        }
Esempio n. 3
0
        public void TestRecommender()
        {
            Recommender             recommender = buildRecommender();
            IList <RecommendedItem> recommended = recommender.Recommend("test1", 1);

            Assert.IsNotNull(recommended);
            Assert.AreEqual(1, recommended.Count);
            RecommendedItem firstRecommended = recommended[0];

            Assert.AreEqual(new GenericItem <String>("2"), firstRecommended.Item);
            Assert.AreEqual(0.3, firstRecommended.Value);
        }
Esempio n. 4
0
        public void TestBestRating()
        {
            Recommender             recommender = buildRecommender();
            IList <RecommendedItem> recommended = recommender.Recommend("test1", 1);

            Assert.IsNotNull(recommended);
            Assert.AreEqual(1, recommended.Count);
            RecommendedItem firstRecommended = recommended[0];

            // item one should be recommended because it has a greater rating/score
            Assert.AreEqual(new GenericItem <String>("2"), firstRecommended.Item);
            Assert.AreEqual(0.3, firstRecommended.Value, EPSILON);
        }
Esempio n. 5
0
        public void TestMostSimilar()
        {
            ItemBasedRecommender    recommender = buildRecommender();
            IList <RecommendedItem> similar     = recommender.MostSimilarItems("0", 2);

            Assert.IsNotNull(similar);
            Assert.AreEqual(2, similar.Count);
            RecommendedItem first  = similar[0];
            RecommendedItem second = similar[1];

            Assert.AreEqual("1", first.Item.ID);
            Assert.AreEqual(1.0, first.Value, EPSILON);
            Assert.AreEqual("2", second.Item.ID);
            Assert.AreEqual(0.5, second.Value, EPSILON);
        }
        public static int GetBestReasonItemId(this RecommendedItem item)
        {
            if (item.Reasons.Count == 0)
            {
                return(-1);
            }

            var bestReason       = item.Reasons.OrderByDescending(it => it.Value).First();
            var bestReasonItemId = 0;

            if (Int32.TryParse(bestReason.Key, out bestReasonItemId))
            {
                return(bestReasonItemId);
            }

            return(-1);
        }
Esempio n. 7
0
        /**
         * Defines a natural ordering from most-preferred item (highest value) to least-preferred.
         *
         * @param other
         * @return 1, -1, 0 as this value is less than, greater than or equal to the other's value
         */
        public int CompareTo(RecommendedItem other)
        {
            double otherValue = other.Value;

            if (value < otherValue)
            {
                return(1);
            }
            else if (value > otherValue)
            {
                return(-1);
            }
            else
            {
                return(0);
            }
        }
Esempio n. 8
0
        public void testRecommendedBecause()
        {
            ItemBasedRecommender    recommender        = buildRecommender2();
            IList <RecommendedItem> recommendedBecause = recommender.RecommendedBecause("test1", "4", 3);

            Assert.IsNotNull(recommendedBecause);
            Assert.AreEqual(3, recommendedBecause.Count);
            RecommendedItem first  = recommendedBecause[0];
            RecommendedItem second = recommendedBecause[1];
            RecommendedItem third  = recommendedBecause[2];

            Assert.AreEqual("2", first.Item.ID);
            Assert.AreEqual(0.99, first.Value, EPSILON);
            Assert.AreEqual("3", second.Item.ID);
            Assert.AreEqual(0.4, second.Value, EPSILON);
            Assert.AreEqual("0", third.Item.ID);
            Assert.AreEqual(0.2, third.Value, EPSILON);
        }
        public void TestBestRating()
        {
            List <User> users = new List <User>(3);

            users.Add(GetUser("test1", 0.0, 0.3));
            users.Add(GetUser("test2", 0.2, 0.3, 0.3));
            users.Add(GetUser("test3", 0.4, 0.3, 0.5));
            DataModel               dataModel   = new GenericDataModel(users);
            Recommender             recommender = new SlopeOneRecommender(dataModel);
            IList <RecommendedItem> recommended = recommender.Recommend("test1", 1);

            Assert.IsNotNull(recommended);
            Assert.AreEqual(1, recommended.Count);
            RecommendedItem firstRecommended = recommended[0];

            // item one should be recommended because it has a greater rating/score
            Assert.AreEqual(new GenericItem <String>("2"), firstRecommended.Item);
            Assert.AreEqual(0.2400938676203033, firstRecommended.Value, EPSILON);
        }
Esempio n. 10
0
        public void TestMostSimilarToMultiple()
        {
            ItemBasedRecommender recommender = buildRecommender2();
            List <Object>        itemIDs     = new List <Object>(2);

            itemIDs.Add("0");
            itemIDs.Add("1");
            IList <RecommendedItem> similar = recommender.MostSimilarItems(itemIDs, 2);

            Assert.IsNotNull(similar);
            Assert.AreEqual(2, similar.Count);
            RecommendedItem first  = similar[0];
            RecommendedItem second = similar[1];

            Assert.AreEqual("2", first.Item.ID);
            Assert.AreEqual(0.85, first.Value, EPSILON);
            Assert.AreEqual("3", second.Item.ID);
            Assert.AreEqual(-0.3, second.Value, EPSILON);
        }
Esempio n. 11
0
        public void TestBestRating()
        {
            List <User> users = new List <User>(4);

            users.Add(GetUser("test1", 0.1, 0.3));
            users.Add(GetUser("test2", 0.2, 0.3, 0.3));
            users.Add(GetUser("test3", 0.4, 0.3, 0.5));
            users.Add(GetUser("test4", 0.7, 0.3, 0.8));
            DataModel               dataModel   = new GenericDataModel(users);
            UserCorrelation         correlation = new PearsonCorrelation(dataModel);
            ClusterSimilarity       similarity  = new FarthestNeighborClusterSimilarity(correlation);
            Recommender             recommender = new TreeClusteringRecommender(dataModel, similarity, 2);
            IList <RecommendedItem> recommended = recommender.Recommend("test1", 1);

            Assert.IsNotNull(recommended);
            Assert.AreEqual(1, recommended.Count);
            RecommendedItem firstRecommended = recommended[0];

            // item one should be recommended because it has a greater rating/score
            Assert.AreEqual(new GenericItem <String>("2"), firstRecommended.Item);
            Assert.AreEqual(0.3, firstRecommended.Value, EPSILON);
        }
 /// <summary>
 /// Utility method to extract the recommended item from a xml recommendation result 
 /// </summary>
 /// <param name="nodeList">the xml element containing the recommended items.</param>
 /// <returns>a collection of recommended item or empty list id sh</returns>
 internal static IEnumerable<RecommendedItem> ExtractRecommendedItems(XmlNodeList nodeList)
 {
     var recoList = new List<RecommendedItem>();
     foreach (var node in (nodeList))
     {
         var item = new RecommendedItem();
         //cycle through the recommended items
         foreach (var child in ((XmlElement)node).ChildNodes)
         {
             //cycle through properties
             var nodeName = ((XmlNode)child).LocalName;
             switch (nodeName)
             {
                 case "Id":
                     item.Id = ((XmlNode)child).InnerText;
                     break;
                 case "Name":
                     item.Name = ((XmlNode)child).InnerText;
                     break;
                 case "Rating":
                     item.Rating = ((XmlNode)child).InnerText;
                     break;
                 case "Reasoning":
                     item.Reasoning = ((XmlNode)child).InnerText;
                     break;
             }
         }
         recoList.Add(item);
     }
     return recoList;
 }
        public IRStatistics evaluate(RecommenderBuilder recommenderBuilder, DataModelBuilder dataModelBuilder, DataModel dataModel, IDRescorer rescorer, int at, double relevanceThreshold, double evaluationPercentage)
        {
            int                num        = dataModel.getNumItems();
            RunningAverage     average    = new FullRunningAverage();
            RunningAverage     average2   = new FullRunningAverage();
            RunningAverage     average3   = new FullRunningAverage();
            RunningAverage     average4   = new FullRunningAverage();
            int                num2       = 0;
            int                num3       = 0;
            IEnumerator <long> enumerator = dataModel.getUserIDs();

            while (enumerator.MoveNext())
            {
                long current = enumerator.Current;
                if (this.random.nextDouble() < evaluationPercentage)
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    PreferenceArray prefs           = dataModel.getPreferencesFromUser(current);
                    double          num5            = double.IsNaN(relevanceThreshold) ? computeThreshold(prefs) : relevanceThreshold;
                    FastIDSet       relevantItemIDs = this.dataSplitter.getRelevantItemsIDs(current, at, num5, dataModel);
                    int             num6            = relevantItemIDs.size();
                    if (num6 > 0)
                    {
                        FastByIDMap <PreferenceArray> trainingUsers = new FastByIDMap <PreferenceArray>(dataModel.getNumUsers());
                        IEnumerator <long>            enumerator2   = dataModel.getUserIDs();
                        while (enumerator2.MoveNext())
                        {
                            this.dataSplitter.processOtherUser(current, relevantItemIDs, trainingUsers, enumerator2.Current, dataModel);
                        }
                        DataModel model = (dataModelBuilder == null) ? new GenericDataModel(trainingUsers) : dataModelBuilder.buildDataModel(trainingUsers);
                        try
                        {
                            model.getPreferencesFromUser(current);
                        }
                        catch (NoSuchUserException)
                        {
                            continue;
                        }
                        int num7 = num6 + model.getItemIDsFromUser(current).size();
                        if (num7 >= (2 * at))
                        {
                            Recommender            recommender = recommenderBuilder.buildRecommender(model);
                            int                    num8        = 0;
                            List <RecommendedItem> list        = recommender.recommend(current, at, rescorer);
                            foreach (RecommendedItem item in list)
                            {
                                if (relevantItemIDs.contains(item.getItemID()))
                                {
                                    num8++;
                                }
                            }
                            int count = list.Count;
                            if (count > 0)
                            {
                                average.addDatum(((double)num8) / ((double)count));
                            }
                            average2.addDatum(((double)num8) / ((double)num6));
                            if (num6 < num7)
                            {
                                average3.addDatum(((double)(count - num8)) / ((double)(num - num6)));
                            }
                            double num10 = 0.0;
                            double num11 = 0.0;
                            for (int i = 0; i < count; i++)
                            {
                                RecommendedItem item2 = list[i];
                                double          num13 = 1.0 / log2(i + 2.0);
                                if (relevantItemIDs.contains(item2.getItemID()))
                                {
                                    num10 += num13;
                                }
                                if (i < num6)
                                {
                                    num11 += num13;
                                }
                            }
                            if (num11 > 0.0)
                            {
                                average4.addDatum(num10 / num11);
                            }
                            num2++;
                            if (count > 0)
                            {
                                num3++;
                            }
                            stopwatch.Stop();
                            log.info("Evaluated with user {} in {}ms", new object[] { current, stopwatch.ElapsedMilliseconds });
                            log.info("Precision/recall/fall-out/nDCG/reach: {} / {} / {} / {} / {}", new object[] { average.getAverage(), average2.getAverage(), average3.getAverage(), average4.getAverage(), ((double)num3) / ((double)num2) });
                        }
                    }
                }
            }
            return(new IRStatisticsImpl(average.getAverage(), average2.getAverage(), average3.getAverage(), average4.getAverage(), ((double)num3) / ((double)num2)));
        }
Esempio n. 14
0
		/**
		 * Defines a natural ordering from most-preferred item (highest value) to least-preferred.
		 *
		 * @param other
		 * @return 1, -1, 0 as this value is less than, greater than or equal to the other's value
		 */
		public int CompareTo(RecommendedItem other) 
		{
			double otherValue = other.Value;
			if (value < otherValue) {
				return 1;
			} else if (value > otherValue) {
				return -1;
			} else {
				return 0;
			}
		}