Ejemplo n.º 1
0
    def calculate_plot_metrics(self, number_of_recommendations=1):
        """
        This method calculates and plots (currently precision and recall) metrics.
        """
        precision = []
        precision_set = []
        recall = []
        recall_set = []
        for i in range(number_of_recommendations):
            print "In loop: ", i, "\r",
            sys.stdout.flush()

            #event_ids = [e.id for e in ml.recommend_events(self.user)]
            #event_category_id_dict = ml.get_categories(event_ids,'C')
            #event_category_ids = [event_category_id_dict[e] for e in event_ids]

            # just get category ids directly

            cats = ml.recommend_categories(self.user)
            event_categories = ml.sample_category_distribution(
                cats.items(), settings.N)

            event_categories = [[a.id] for a in event_categories]
            #print map(lambda l: map(self.get_category_string, l),event_category_ids)

            p, pres = self.calculate_precision_value(event_categories)
            precision.append(p)
            precision_set.append(pres)
            r, rres = self.calculate_recall_value(event_categories)
            recall.append(r)
            recall_set.append(rres)
            self.update_behavior(event_categories)
            #print "Events: ", events
            #print "precision: ", precision
            #print "recall: ", recall
            #print [[self.get_category_string(c) for c in clst] for clst in event_category_ids][0]

        print "precision: ", precision
        #print "Precision: ", precision_set
        print "recall: ", recall
        print "recall: ", [
            map(self.get_category_string, a) for a in map(list, recall_set)
        ]

        #plt.figure(1)
        #plt.plot(precision,color=color,label=label)
        #plt.figure(2)
        #plt.plot(recall,color=color, label=label)
        return (precision, recall)
Ejemplo n.º 2
0
    def test_convergence(self):
        categories = ml.recommend_categories(self.user)
        #print "Categories: ", categories
        picked_category = ml.sample_distribution(categories.items())[0]
        #print "picked category: ", picked_category
        picked_aggr = EventActionAggregate(user=self.user, category=picked_category)
        lst = []
        ctree = CachedCategoryTree()
        parents = ctree.parents(picked_category)
        count = 0
        while count < 100:
            count +=1
            print "Round: %d\r"%count,
            sys.stdout.flush()
            # recommend a new set of categories
            recommendation_scores =  ml.recommend_categories(self.user)
            cats = ml.sample_category_distribution(recommendation_scores.items(),
                                          settings.N)
            found_count = cats.count(picked_category)

            #print "Categories: ",cats
            #print "ID: ", picked_category.id
            cats = set(cats)
            cats.discard(picked_category.id)

            # # G(oto) picked category
            picked_aggr.g += found_count
            picked_aggr.save()

            # X all other categories
            for c in cats:
                if c in parents:
                    continue
                try:
                    eaa = EventActionAggregate.objects.get(user=self.user, category=c)
                except EventActionAggregate.DoesNotExist:
                    eaa = EventActionAggregate(user=self.user, category=c)
                eaa.x += 1
                eaa.save()

            lst.append(found_count*100.0/settings.N)
        plt.plot(lst,color="blue")
        plt.title("Rate of learning one category")
        plt.xlabel("Trials")
        plt.ylabel("% of all Recommendations")
        plt.savefig("learning/test_results/test.pdf")
        plt.cla()
        self.assertTrue(True)
Ejemplo n.º 3
0
    def calculate_plot_metrics(self, number_of_recommendations=1):
        """
        This method calculates and plots (currently precision and recall) metrics.
        """
        precision = []
        precision_set = []
        recall = []
        recall_set = []
        for i in range(number_of_recommendations):
            print "In loop: ", i, "\r",
            sys.stdout.flush()
            
            #event_ids = [e.id for e in ml.recommend_events(self.user)]
            #event_category_id_dict = ml.get_categories(event_ids,'C')
            #event_category_ids = [event_category_id_dict[e] for e in event_ids]
            
            # just get category ids directly
            
            cats = ml.recommend_categories(self.user)
            event_categories = ml.sample_category_distribution(cats.items(), 
                                                    settings.N)

            event_categories= [[a.id] for a in event_categories]
            #print map(lambda l: map(self.get_category_string, l),event_category_ids)
            
            p,pres =self.calculate_precision_value(event_categories)
            precision.append(p)
            precision_set.append(pres)
            r,rres = self.calculate_recall_value(event_categories)
            recall.append(r)
            recall_set.append(rres)
            self.update_behavior(event_categories)
            #print "Events: ", events
            #print "precision: ", precision
            #print "recall: ", recall
            #print [[self.get_category_string(c) for c in clst] for clst in event_category_ids][0]

        print "precision: ", precision
        #print "Precision: ", precision_set
        print "recall: ", recall
        print "recall: ", [map(self.get_category_string,a) for a in map(list,recall_set)]

        #plt.figure(1)
        #plt.plot(precision,color=color,label=label)
        #plt.figure(2)
        #plt.plot(recall,color=color, label=label)
        return (precision, recall)