class NMF(BaseEstimator): def __init__(self, n=5, factors=50): print 'nmf begin' self.n = n self.factors = factors def predict(self, testSamples): recommend_lists = [] for user_item in testSamples: uid = self.dataModel.getUidByUser(user_item[0]) iid = self.dataModel.getUidByUser(user_item[1]) recommend_lists.append(np.dot(self.pu[uid], self.qi[iid])) return recommend_lists def fit(self, trainSamples, trainTargets): self.dataModel = MemeryDataModel(trainSamples, trainTargets) #print 'train user:'******'not in test' return [] else: predict_scores = [] for i in range(self.dataModel.getItemsNum()): predict_scores.append(self.predict_single(uid, i)) topN = np.argsort(np.array(predict_scores))[-1:-self.n - 1:-1] return [self.dataModel.getItemByIid(i) for i in topN] def score(self, testSamples, trueLabels): print 'NMF scoring ...' trueList = [] recommendList = [] user_unique = list(set(np.array(testSamples)[:, 0])) #print 'test user:'******'NMF result:' + '(' + str(self.get_params()) + ')' + str( (result)['F1']) return (result)['F1']
class TopN(BaseEstimator): def __init__(self, n=5): print 'topN begin' self.n = n def gen_items_popular(self, trainSamples, trainTargets, hasTimes=False): self.dataModel = MemeryDataModel(trainSamples, trainTargets) itempopular = np.zeros(self.dataModel.getItemsNum()) uids = self.dataModel.getData().nonzero()[0] iids = self.dataModel.getData().nonzero()[1] for i in range(len(iids)): iid = iids[i] itempopular[iid] += 1 self.popItems = itempopular def predict(self, testSamples): recommend_lists = [] for user_item in testSamples: if self.dataModel.getIidByItem(user_item[1]) in self.topN[:self.n]: recommend_lists.append(1) else: recommend_lists.append(0) return recommend_lists def fit(self, trainSamples, trainTargets): #print trainSamples, trainTargets #print len(trainSamples), len(trainTargets) self.gen_items_popular(trainSamples, trainTargets) self.topN = np.argsort(np.array(self.popItems))[-1::-1] return self def recommend(self, uid): return [self.dataModel.getItemByIid(i) for i in self.topN[:self.n]] def score(self, testSamples, trueLabels): #print testSamples #print len(testSamples) trueList = [] recommendList = [] user_unique = list(set(np.array(testSamples)[:, 0])) for u in user_unique: uTrueIndex = np.argwhere(np.array(testSamples)[:, 0] == u)[:, 0] #true = [self.dataModel.getIidByItem(i) for i in list(np.array(testSamples)[uTrueIndex][:,1])] true = list(np.array(testSamples)[uTrueIndex][:, 1]) trueList.append(true) pre = [self.dataModel.getItemByIid(i) for i in self.topN[:self.n]] recommendList.append(pre) e = Eval() result = e.evalAll(recommendList, trueList) print 'TopN result:' + '(' + str(self.get_params()) + ')' + str( (result)['F1']) return (result)['F1']
class TopN(BaseEstimator): def __init__(self, n=5): print 'topN begin' self.n = n def gen_items_popular(self, trainSamples, trainTargets, hasTimes=False): self.dataModel = MemeryDataModel(trainSamples, trainTargets) itempopular = np.zeros(self.dataModel.getItemsNum()) uids = self.dataModel.getData().nonzero()[0] iids = self.dataModel.getData().nonzero()[1] for i in range(len(iids)): iid = iids[i] itempopular[iid] += 1 self.popItems = itempopular def predict(self, testSamples): recommend_lists = [] for user_item in testSamples: if self.dataModel.getIidByItem(user_item[1]) in self.topN[:self.n]: recommend_lists.append(1) else: recommend_lists.append(0) return recommend_lists def fit(self, trainSamples, trainTargets): #print trainSamples, trainTargets #print len(trainSamples), len(trainTargets) self.gen_items_popular(trainSamples, trainTargets) self.topN = np.argsort(np.array(self.popItems))[-1::-1] return self def recommend(self, uid): return [self.dataModel.getItemByIid(i) for i in self.topN[:self.n]] def score(self, testSamples, trueLabels): #print testSamples #print len(testSamples) trueList = [] recommendList= [] user_unique = list(set(np.array(testSamples)[:,0])) for u in user_unique: uTrueIndex = np.argwhere(np.array(testSamples)[:,0] == u)[:,0] #true = [self.dataModel.getIidByItem(i) for i in list(np.array(testSamples)[uTrueIndex][:,1])] true = list(np.array(testSamples)[uTrueIndex][:,1]) trueList.append(true) pre = [self.dataModel.getItemByIid(i) for i in self.topN[:self.n]] recommendList.append(pre) e = Eval() result = e.evalAll(recommendList, trueList) print 'TopN result:'+'('+str(self.get_params())+')'+str((result)['F1']) return (result)['F1']
class NMF(BaseEstimator): def __init__(self, n=5, factors=50): print 'nmf begin' self.n = n self.factors = factors def predict(self, testSamples): recommend_lists = [] for user_item in testSamples: uid = self.dataModel.getUidByUser(user_item[0]) iid = self.dataModel.getUidByUser(user_item[1]) recommend_lists.append(np.dot(self.pu[uid], self.qi[iid])) return recommend_lists def fit(self, trainSamples, trainTargets): self.dataModel = MemeryDataModel(trainSamples, trainTargets) #print 'train user:'******'not in test' return [] else: predict_scores = [] for i in range(self.dataModel.getItemsNum()): predict_scores.append(self.predict_single(uid, i)) topN = np.argsort(np.array(predict_scores))[-1:-self.n-1:-1] return [self.dataModel.getItemByIid(i) for i in topN] def score(self, testSamples, trueLabels): print 'NMF scoring ...' trueList = [] recommendList= [] user_unique = list(set(np.array(testSamples)[:,0])) #print 'test user:'******'NMF result:'+'('+str(self.get_params())+')' + str((result)['F1']) return (result)['F1']