def test_local_not_existing_capper_False_estimatePreference(self): userID = "Leopoldo Pires" itemID = "You, Me and Dupree" recSys = UserRecommender(self.model, self.similarity, self.neighbor, False) self.assertAlmostEquals( 2.065394689, recSys.estimatePreference(userID=userID, similarity=self.similarity, itemID=itemID) )
def test_local_estimatePreference(self): userID = "Marcel Caraciolo" itemID = "Superman Returns" recSys = UserRecommender(self.model, self.similarity, self.neighbor, True) self.assertAlmostEquals( 3.5, recSys.estimatePreference(userID=userID, similarity=self.similarity, itemID=itemID) )
def test_evaluate_RMSRecommenderEvaluator(self): evaluator = RMSRecommenderEvaluator() recommender = UserRecommender(self.model, self.similarity, self.neighbor, True) evaluationPercentage = 1.0 trainingPercentage = 0.7 numUsers = self.model.NumUsers() trainingUsers = {} testUserPrefs = {} self.total = 0 self.diffs = 0.0 for userID in self.model.UserIDs(): if random() < evaluationPercentage: evaluator.processOneUser(trainingPercentage, trainingUsers, testUserPrefs, userID, self.model) total_training = sum([ len([pref for pref in prefs]) for user, prefs in trainingUsers.iteritems() ]) total_testing = sum([ len([pref for pref in prefs]) for user, prefs in testUserPrefs.iteritems() ]) #self.assertAlmostEquals(total_training/float(total_training+total_testing), 0.7) #self.assertAlmostEquals(total_testing/float(total_training+total_testing), 0.3) trainingModel = DictDataModel(trainingUsers) self.assertEquals(sorted(trainingModel.UserIDs()), sorted([user for user in trainingUsers])) recommender.model = trainingModel self.assertEquals(recommender.model, trainingModel) for userID, prefs in testUserPrefs.iteritems(): estimatedPreference = None for pref in prefs: try: estimatedPreference = recommender.estimatePreference( userID=userID, similarity=self.similarity, itemID=pref) except: pass if estimatedPreference is not None: estimatedPreference = evaluator.capEstimatePreference( estimatedPreference) self.assert_( estimatedPreference <= evaluator.maxPreference and estimatedPreference >= evaluator.minPreference) diff = prefs[pref] - estimatedPreference self.diffs += (diff * diff) self.total += 1 result = sqrt(self.diffs / float(self.total))
def test_local_not_existing_rescorer_estimatePreference(self): userID = "Leopoldo Pires" itemID = "You, Me and Dupree" recSys = UserRecommender(self.model, self.similarity, self.neighbor, False) scorer = TanHScorer() self.assertAlmostEquals( 2.5761016605, recSys.estimatePreference(userID=userID, similarity=self.similarity, itemID=itemID, rescorer=scorer), )
def test_local_not_existing_capper_False_estimatePreference(self): userID = 'Leopoldo Pires' itemID = 'You, Me and Dupree' recSys = UserRecommender(self.model, self.similarity, self.neighbor, False) self.assertAlmostEquals( 2.065394689, recSys.estimatePreference(userID=userID, similarity=self.similarity, itemID=itemID))
def test_local_estimatePreference(self): userID = 'Marcel Caraciolo' itemID = 'Superman Returns' recSys = UserRecommender(self.model, self.similarity, self.neighbor, True) self.assertAlmostEquals( 3.5, recSys.estimatePreference(userID=userID, similarity=self.similarity, itemID=itemID))
def test_local_not_existing_rescorer_estimatePreference(self): userID = 'Leopoldo Pires' itemID = 'You, Me and Dupree' recSys = UserRecommender(self.model, self.similarity, self.neighbor, False) scorer = TanHScorer() self.assertAlmostEquals( 2.5761016605, recSys.estimatePreference(userID=userID, similarity=self.similarity, itemID=itemID, rescorer=scorer))
def test_evaluate_RMSRecommenderEvaluator(self): evaluator = RMSRecommenderEvaluator() recommender = UserRecommender(self.model,self.similarity,self.neighbor,True) evaluationPercentage = 1.0 trainingPercentage = 0.7 numUsers = self.model.NumUsers() trainingUsers = {} testUserPrefs = {} self.total = 0 self.diffs = 0.0 for userID in self.model.UserIDs(): if random() < evaluationPercentage: evaluator.processOneUser(trainingPercentage,trainingUsers,testUserPrefs,userID,self.model) total_training = sum([ len([pref for pref in prefs]) for user,prefs in trainingUsers.iteritems()]) total_testing = sum([ len([pref for pref in prefs]) for user,prefs in testUserPrefs.iteritems()]) #self.assertAlmostEquals(total_training/float(total_training+total_testing), 0.7) #self.assertAlmostEquals(total_testing/float(total_training+total_testing), 0.3) trainingModel = DictDataModel(trainingUsers) self.assertEquals(sorted(trainingModel.UserIDs()), sorted([user for user in trainingUsers])) recommender.model = trainingModel self.assertEquals(recommender.model,trainingModel) for userID,prefs in testUserPrefs.iteritems(): estimatedPreference = None for pref in prefs: try: estimatedPreference = recommender.estimatePreference(userID=userID,similarity=self.similarity,itemID=pref) except: pass if estimatedPreference is not None: estimatedPreference = evaluator.capEstimatePreference(estimatedPreference) self.assert_(estimatedPreference <= evaluator.maxPreference and estimatedPreference >= evaluator.minPreference) diff = prefs[pref] - estimatedPreference self.diffs+= (diff * diff) self.total += 1 result = sqrt(self.diffs / float(self.total))