def __calc_mae(self, test_db): """ This method evaluates that how much our prediction's are accurate. This distinction is very important. MAE is able to characterize the accuracy of prediction not accuracy of recommendation[1]. If you want to evaluate accuracy of prediction, you should use 'pr' rather than 'mae'. 'pr' provides you Precision and Recall. [1]: Symeonidis, P. et al., 2006. Collaborative Filtering: Fallacies and Insights in Measuring Similarity. In citeulikeorg. Citeseer, p. 56. Available at: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.8340& rep=rep1&type=pdf. """ rating_list = [] for user, itemRating in test_db.iteritems(): # user : integer - user_id # itemRating : dictionary - { item_id:Rating, ... } rating = self.rec.predict(user, itemRating.keys()[0]) rating_list.append([rating, itemRating.values()[0]]) rating_array = np.array(rating_list) print "Number of key error: %s" % self.rec.adapt.numberOfKeyError #TODO: self.eval_metric? return mae(rating_array[:,0], rating_array[:,1])
def __calc_mae(self, test_db): """ This method evaluates that how much our prediction's are accurate. This distinction is very important. MAE is able to characterize the accuracy of prediction not accuracy of recommendation[1]. If you want to evaluate accuracy of prediction, you should use 'pr' rather than 'mae'. 'pr' provides you Precision and Recall. [1]: Symeonidis, P. et al., 2006. Collaborative Filtering: Fallacies and Insights in Measuring Similarity. In citeulikeorg. Citeseer, p. 56. Available at: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.8340& rep=rep1&type=pdf. """ rating_list = [] for user, itemRating in test_db.iteritems(): # user : integer - user_id # itemRating : dictionary - { item_id:Rating, ... } rating = self.rec.predict(user, itemRating.keys()[0]) rating_list.append([rating, itemRating.values()[0]]) rating_array = np.array(rating_list) print "Number of key error: %s" % self.rec.adapt.numberOfKeyError #TODO: self.eval_metric? return mae(rating_array[:, 0], rating_array[:, 1])
def evaluate(self): #shuffle(self.rec.X) # First, dataset should be shuffled. result = [] n = len(self.testX) for i, item in enumerate(self.testX): prediction = self.rec.predict(item) result.append(prediction) if (i+1) % 32 == 0: pass #print "%s/%s completed..." % (i, n) return mae(result, self.testy)