def reset(self, params, rep): if params['name'].startswith("content"): cfg = Config() # if the index was not built yet # app_axi = AppAptXapianIndex(cfg.axi,"results/arnaldo/AppAxi") cfg.axi = "data/AppAxi" cfg.index_mode = "old" cfg.weight = params['weight'] self.rec = Recommender(cfg) self.rec.set_strategy(params['strategy']) self.repo_size = self.rec.items_repository.get_doccount() self.user = LocalSystem() self.user.app_pkg_profile(self.rec.items_repository) self.user.no_auto_pkg_profile() self.sample_size = int( len(self.user.pkg_profile) * params['sample'])
def get_user(self, no_auto_pkg_profile): config = Config() user = LocalSystem() user.filter_pkg_profile( os.path.join(config.filters_dir, "desktopapps")) user.maximal_pkg_profile() if no_auto_pkg_profile: user.no_auto_pkg_profile() return user
def reset(self, params, rep): if params['name'].startswith("content"): cfg = Config() #if the index was not built yet #app_axi = AppAptXapianIndex(cfg.axi,"results/arnaldo/AppAxi") cfg.axi = "data/AppAxi" cfg.index_mode = "old" cfg.weight = params['weight'] self.rec = Recommender(cfg) self.rec.set_strategy(params['strategy']) self.repo_size = self.rec.items_repository.get_doccount() self.user = LocalSystem() self.user.app_pkg_profile(self.rec.items_repository) self.user.no_auto_pkg_profile() self.sample_size = int(len(self.user.pkg_profile)*params['sample'])
""" import os import sys sys.path.insert(0,'../') import logging import random import datetime from config import Config from recommender import Recommender from user import LocalSystem, RandomPopcon if __name__ == '__main__': begin_time = datetime.datetime.now() cfg = Config() rec = Recommender(cfg) logging.info("Computation started at %s" % begin_time) #user = RandomPopcon(cfg.popcon_dir,os.path.join(cfg.filters_dir,"desktopapps")) user = LocalSystem() user.filter_pkg_profile(os.path.join(cfg.filters_dir,"desktopapps")) user.maximal_pkg_profile() logging.info("Recommending applications for user %s" % user.user_id) logging.info(rec.get_recommendation(user,20)) end_time = datetime.datetime.now() logging.info("Computation completed at %s" % end_time) delta = end_time - begin_time logging.info("Time elapsed: %d seconds." % delta.seconds)
class ContentBasedSuite(expsuite.PyExperimentSuite): def reset(self, params, rep): if params['name'].startswith("content"): cfg = Config() # if the index was not built yet # app_axi = AppAptXapianIndex(cfg.axi,"results/arnaldo/AppAxi") cfg.axi = "data/AppAxi" cfg.index_mode = "old" cfg.weight = params['weight'] self.rec = Recommender(cfg) self.rec.set_strategy(params['strategy']) self.repo_size = self.rec.items_repository.get_doccount() self.user = LocalSystem() self.user.app_pkg_profile(self.rec.items_repository) self.user.no_auto_pkg_profile() self.sample_size = int( len(self.user.pkg_profile) * params['sample']) # iteration should be set to 10 in config file # self.profile_size = range(10,101,10) def iterate(self, params, rep, n): if params['name'].startswith("content"): item_score = dict.fromkeys(self.user.pkg_profile, 1) # Prepare partition sample = {} for i in range(self.sample_size): key = random.choice(item_score.keys()) sample[key] = item_score.pop(key) # Get full recommendation user = User(item_score) recommendation = self.rec.get_recommendation(user, self.repo_size) # Write recall log recall_file = "results/content/recall/%s-%s-%.2f-%d" % \ (params['strategy'], params[ 'weight'], params['sample'], n) output = open(recall_file, 'w') output.write("# weight=%s\n" % params['weight']) output.write("# strategy=%s\n" % params['strategy']) output.write("# sample=%f\n" % params['sample']) output.write("\n%d %d %d\n" % (self.repo_size, len(item_score), self.sample_size)) notfound = [] ranks = [] for pkg in sample.keys(): if pkg in recommendation.ranking: ranks.append(recommendation.ranking.index(pkg)) else: notfound.append(pkg) for r in sorted(ranks): output.write(str(r) + "\n") if notfound: output.write("Out of recommendation:\n") for pkg in notfound: output.write(pkg + "\n") output.close() # Plot metrics summary accuracy = [] precision = [] recall = [] f1 = [] g = Gnuplot.Gnuplot() g('set style data lines') g.xlabel('Recommendation size') for size in range(1, len(recommendation.ranking) + 1, 100): predicted = RecommendationResult( dict.fromkeys(recommendation.ranking[:size], 1)) real = RecommendationResult(sample) evaluation = Evaluation(predicted, real, self.repo_size) accuracy.append([size, evaluation.run(Accuracy())]) precision.append([size, evaluation.run(Precision())]) recall.append([size, evaluation.run(Recall())]) f1.append([size, evaluation.run(F1())]) g.plot(Gnuplot.Data(accuracy, title="Accuracy"), Gnuplot.Data(precision, title="Precision"), Gnuplot.Data(recall, title="Recall"), Gnuplot.Data(f1, title="F1")) g.hardcopy(recall_file + "-plot.ps", enhanced=1, color=1) # Iteration log result = {'iteration': n, 'weight': params['weight'], 'strategy': params['strategy'], 'accuracy': accuracy[20], 'precision': precision[20], 'recall:': recall[20], 'f1': f1[20]} return result