예제 #1
0
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']
예제 #2
0
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']
예제 #3
0
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']
예제 #4
0
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']