예제 #1
0
    def predictWithKernelMatrices(self, K1pred, K2pred, row_inds = None, col_inds = None):
        """Computes predictions for test examples.

        Parameters
        ----------
        K1pred: {array-like, sparse matrix}, shape = [n_samples1, n_basis_functions1]
            the first part of the test data matrix
        K2pred: {array-like, sparse matrix}, shape = [n_samples2, n_basis_functions2]
            the second part of the test data matrix
        
        Returns
        ----------
        P: array, shape = [n_samples1, n_samples2]
            predictions
        """
        if row_inds == None:
            P = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(self.A, K1pred, K2pred.T, self.label_row_inds, self.label_col_inds)
            P = P.reshape((K1pred.shape[0], K2pred.shape[0]), order='F')
        else:
            P = sparse_kronecker_multiplication_tools_python.x_gets_C_times_M_kron_N_times_B_times_v(
                self.A,
                K2pred,
                K1pred,
                np.array(row_inds, dtype = np.int32),
                np.array(col_inds, dtype = np.int32),
                self.label_row_inds,
                self.label_col_inds)
        P = np.array(P)
        return P
예제 #2
0
    def predictWithKernelMatrices(self,
                                  K1pred,
                                  K2pred,
                                  row_inds=None,
                                  col_inds=None):
        """Computes predictions for test examples.

        Parameters
        ----------
        K1pred: {array-like, sparse matrix}, shape = [n_samples1, n_basis_functions1]
            the first part of the test data matrix
        K2pred: {array-like, sparse matrix}, shape = [n_samples2, n_basis_functions2]
            the second part of the test data matrix
        
        Returns
        ----------
        P: array, shape = [n_samples1, n_samples2]
            predictions
        """
        if row_inds == None:
            P = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(
                self.A, K1pred, K2pred.T, self.label_row_inds,
                self.label_col_inds)
            P = P.reshape((K1pred.shape[0], K2pred.shape[0]), order='F')
        else:
            P = sparse_kronecker_multiplication_tools_python.x_gets_C_times_M_kron_N_times_B_times_v(
                self.A, K2pred, K1pred, np.array(row_inds, dtype=np.int32),
                np.array(col_inds, dtype=np.int32), self.label_row_inds,
                self.label_col_inds)
        return P
예제 #3
0
 def mv(v):
     v_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(
         v, X1, X2.T, label_row_inds, label_col_inds)
     v_after = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(
         v_after, X1.T, X2, label_row_inds,
         label_col_inds) + regparam * v
     return v_after
예제 #4
0
    def solve_linear(self, regparam):
        self.regparam = regparam
        X1 = self.resource_pool['xmatrix1']
        X2 = self.resource_pool['xmatrix2']
        self.X1, self.X2 = X1, X2

        if 'maxiter' in self.resource_pool:
            maxiter = int(self.resource_pool['maxiter'])
        else:
            maxiter = None

        x1tsize, x1fsize = X1.shape  #m, d
        x2tsize, x2fsize = X2.shape  #q, r
        lsize = len(self.label_row_inds)  #n

        kronfcount = x1fsize * x2fsize

        label_row_inds = np.array(self.label_row_inds, dtype=np.int32)
        label_col_inds = np.array(self.label_col_inds, dtype=np.int32)

        def mv(v):
            v_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(
                v, X1, X2.T, label_row_inds, label_col_inds)
            v_after = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(
                v_after, X1.T, X2, label_row_inds,
                label_col_inds) + regparam * v
            return v_after

        def mvr(v):
            raise Exception('You should not be here!')
            return None

        def cgcb(v):
            self.W = v.reshape((x1fsize, x2fsize), order='F')
            self.callback()

        G = LinearOperator((kronfcount, kronfcount),
                           matvec=mv,
                           rmatvec=mvr,
                           dtype=np.float64)

        v_init = np.array(self.Y).reshape(self.Y.shape[0])
        v_init = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(
            v_init, X1.T, X2, label_row_inds, label_col_inds)
        v_init = np.array(v_init).reshape(kronfcount)
        if self.resource_pool.has_key('warm_start'):
            x0 = np.array(self.resource_pool['warm_start']).reshape(kronfcount,
                                                                    order='F')
        else:
            x0 = None
        self.W = bicgstab(G, v_init, x0=x0, maxiter=maxiter,
                          callback=cgcb)[0].reshape((x1fsize, x2fsize),
                                                    order='F')
        self.model = LinearPairwiseModel(self.W, X1.shape[1], X2.shape[1])
        self.finished()
예제 #5
0
파일: kron_svm.py 프로젝트: max291/RLScore
def gradient(v, X1, X2, Y, rowind, colind, lamb):
    #REPLACE
    #P = np.dot(X,v)
    #P = vecProd(X1, X2, v)
    P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(v, X2, X1.T, colind, rowind)
    z = (1. - Y*P)
    z = np.where(z>0, z, 0)
    sv = np.nonzero(z)[0]
    #map to rows and cols
    rows = rowind[sv]
    cols = colind[sv]
    #A = -2*np.dot(X[sv].T, Y[sv])
    A = - sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(Y[sv], X1.T, X2, rows, cols)
    A = A.reshape(X2.shape[1], X1.shape[1]).T.ravel()
    #B = 2 * np.dot(X[sv].T, np.dot(X[sv],v))
    v_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(v, X2, X1.T, cols, rows)
    v_after = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(v_after, X1.T, X2, rows, cols)
    B = v_after.reshape(X2.shape[1], X1.shape[1]).T.ravel()
    #print "FOOOBAAR"
    return A + B + lamb*v
예제 #6
0
파일: kron_svm.py 프로젝트: max291/RLScore
def hessian(v, p, X1, X2, Y, rowind, colind, lamb):
    #P = np.dot(X,v)
    #P = vecProd(X1, X2, v)
    P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(v, X2, X1.T, colind, rowind)
    z = (1. - Y*P)
    z = np.where(z>0, z, 0)
    sv = np.nonzero(z)[0]
    #map to rows and cols
    rows = rowind[sv]
    cols = colind[sv]
    p_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(p, X2, X1.T, cols, rows)
    p_after = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(p_after, X1.T, X2, rows, cols)
    p_after = p_after.reshape(X2.shape[1], X1.shape[1]).T.ravel()
    return p_after + lamb*p    
예제 #7
0
파일: kron_svm.py 프로젝트: lenovor/RLScore
 def gradient(v):
     #REPLACE
     #P = np.dot(X,v)
     #P = vecProd(X1, X2, v)
     P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(
         v, X2, X1.T, colind, rowind)
     z = (1. - Y * P)
     z = np.where(z > 0, z, 0)
     sv = np.nonzero(z)[0]
     #map to rows and cols
     rows = rowind[sv]
     cols = colind[sv]
     #A = -2*np.dot(X[sv].T, Y[sv])
     A = -2 * sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(
         Y[sv], X1.T, X2, rows, cols)
     A = A.reshape(X2.shape[1], X1.shape[1]).T.ravel()
     #B = 2 * np.dot(X[sv].T, np.dot(X[sv],v))
     v_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(
         v, X2, X1.T, cols, rows)
     v_after = 2 * sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(
         v_after, X1.T, X2, rows, cols)
     B = v_after.reshape(X2.shape[1], X1.shape[1]).T.ravel()
     #print "FOOOBAAR"
     return A + B + lamb * v
예제 #8
0
파일: kron_svm.py 프로젝트: lenovor/RLScore
 def hessian(v, p):
     #P = np.dot(X,v)
     #P = vecProd(X1, X2, v)
     P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(
         v, X2, X1.T, colind, rowind)
     z = (1. - Y * P)
     z = np.where(z > 0, z, 0)
     sv = np.nonzero(z)[0]
     #map to rows and cols
     rows = rowind[sv]
     cols = colind[sv]
     p_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(
         p, X2, X1.T, cols, rows)
     p_after = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(
         p_after, X1.T, X2, rows, cols)
     p_after = p_after.reshape(X2.shape[1], X1.shape[1]).T.ravel()
     return 2 * p_after + lamb * p
예제 #9
0
 def solve_linear(self, regparam):
     self.regparam = regparam
     X1 = self.resource_pool['xmatrix1']
     X2 = self.resource_pool['xmatrix2']
     self.X1, self.X2 = X1, X2
     
     if 'maxiter' in self.resource_pool: maxiter = int(self.resource_pool['maxiter'])
     else: maxiter = None
     
     x1tsize, x1fsize = X1.shape #m, d
     x2tsize, x2fsize = X2.shape #q, r
     lsize = len(self.label_row_inds) #n
     
     kronfcount = x1fsize * x2fsize
     
     label_row_inds = np.array(self.label_row_inds, dtype = np.int32)
     label_col_inds = np.array(self.label_col_inds, dtype = np.int32)
     
     def mv(v):
         v_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(v, X1, X2.T, label_row_inds, label_col_inds)
         v_after = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(v_after, X1.T, X2, label_row_inds, label_col_inds) + regparam * v
         return v_after
     
     def mvr(v):
         raise Exception('You should not be here!')
         return None
     
     def cgcb(v):
         self.W = v.reshape((x1fsize, x2fsize), order = 'F')
         self.callback()
         
     G = LinearOperator((kronfcount, kronfcount), matvec = mv, rmatvec = mvr, dtype = np.float64)
     
     v_init = np.array(self.Y).reshape(self.Y.shape[0])
     v_init = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(v_init, X1.T, X2, label_row_inds, label_col_inds)
     v_init = np.array(v_init).reshape(kronfcount)
     if self.resource_pool.has_key('warm_start'):
         x0 = np.array(self.resource_pool['warm_start']).reshape(kronfcount, order = 'F')
     else:
         x0 = None
     self.W = bicgstab(G, v_init, x0 = x0, maxiter = maxiter, callback = cgcb)[0].reshape((x1fsize, x2fsize), order='F')
     self.model = LinearPairwiseModel(self.W, X1.shape[1], X2.shape[1])
     self.finished()
예제 #10
0
 def mv(v):
     v_after = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(v, X1, X2.T, label_row_inds, label_col_inds)
     v_after = sparse_kronecker_multiplication_tools_python.x_gets_A_kron_B_times_sparse_v(v_after, X1.T, X2, label_row_inds, label_col_inds) + regparam * v
     return v_after