Esempio n. 1
0
    def RankListVoteMerge(self, matrix_type="rankdifference", epsilon=0.75):
        """
        matrix_type: 'rankdifference' or 'listdifference'
        epsilon:     PR specific value
        """
        if self.cnt==0:
            return pd.DataFrame(columns=['title', 'rate', 'rank'])
        ranktable = self.ranktable
        ranktable = ranktable.dropna()
        methods = ranktable.columns.drop('title')
        D = np.zeros((ranktable.shape[0], ranktable.shape[0]), dtype=np.float32)
        if matrix_type=="rankdifference":
            fast_generate_rank_difference_matrix(ranktable[methods].values, D)
        elif matrix_type=="listdifference":
            fast_generate_list_difference_matrix(ranktable[methods].values, D)
        else:
            raise ValueError("Invalid matrix type.")

        tmpitemlst = pd.DataFrame({'itemid': ranktable.loc[:,'title'],
                                   'index': range(ranktable.shape[0])},
                                  columns=['itemid', 'index'])
        ranker = MarkovRank(itemlist=tmpitemlst, epsilon=epsilon)
        rate = ranker.rate(D)
        rtn = ranker.rank(rate)
        return rtn
Esempio n. 2
0
    def LeastViolatedMerge(self, verbose=0):
        if self.cnt==0:
            return pd.DataFrame(columns=['title', 'rate', 'rank'])
        ranktable = self.ranktable
        ranktable = ranktable.dropna()
        methods = ranktable.columns.drop('title')
        C = np.zeros((ranktable.shape[0], ranktable.shape[0]), dtype=np.float32)
        fast_generate_list_difference_matrix(ranktable[methods].values, C)
        # originally in this funciton, C[i, j] is the list count that ranked i lower than j
        # but here, C[i, j] should be the number of lists that i is ranked higher than j minus
        # the number of lists that i is ranked lower than j.
        C = C.T-C

        tmpitemlst = pd.DataFrame({'itemid': ranktable.loc[:,'title'],
                                   'index': range(ranktable.shape[0])},
                                  columns=['itemid', 'index'])
        ranker = LeastViolatedRank(itemlist=tmpitemlst, minimize=False,
                                   verbose=verbose, ascending=True)
        rate = ranker.rate(C)
        rtn = ranker.rank(rate)
        return rtn