示例#1
0
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    
示例#2
0
 def func(v):
     #REPLACE
     #P = np.dot(X,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)
     return np.dot(z,z)
示例#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 func(v):
     #REPLACE
     #P = np.dot(X,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)
     return np.dot(z, z) + lamb * np.dot(v, v)
示例#5
0
 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
示例#6
0
 def predictWithDataMatricesAlt(self, X1pred, X2pred, row_inds = None, col_inds = None):
     if row_inds == None:
         P = np.dot(np.dot(X1pred, self.W), X2pred.T)
         P = P.reshape(X1pred.shape[0] * X2pred.shape[0], 1, order = 'F')
     else:
         P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(self.W.reshape((self.W.shape[0] * self.W.shape[1], 1), order = 'F'), X1pred, X2pred.T, np.array(row_inds, dtype=np.int32), np.array(col_inds, dtype=np.int32))
         #P = X1pred * self.W * X2pred.T
     return P
示例#7
0
def func(v, X1, X2, Y, rowind, colind, lamb):
    #REPLACE
    #P = np.dot(X,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)
    #print z
    z = np.where(z>0, z, 0)
    #return np.dot(z,z)
    return 0.5*(np.dot(z,z)+lamb*np.dot(v,v))
示例#8
0
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
def primal_rls_objective(w, X1, X2, Y, rowind, colind, lamb):
    #primal form of the objective function for regularized least squares
    #w: current primal solution
    #X1: samples x features data matrix for domain 1
    #X2: samples x features data matrix for domain 2
    #rowind: row indices for training pairs
    #colind: column indices for training pairs
    #lamb: regularization parameter
    P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(w, X2, X1.T, colind, rowind)
    z = (Y - P)
    return 0.5*(np.dot(z,z)+lamb*np.dot(w,w))
def primal_svm_objective(w, X1, X2, Y, rowind, colind, lamb):
    #primal form of the objective function for support vector machine
    #w: current primal solution
    #X1: samples x features data matrix for domain 1
    #X2: samples x features data matrix for domain 2
    #rowind: row indices for training pairs
    #colind: column indices for training pairs
    #lamb: regularization parameter
    #P = np.dot(X,v)
    P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(w, X2, X1.T, colind, rowind)
    z = (1. - Y*P)
    z = np.where(z>0, z, 0)
    return 0.5*(np.dot(z,z)+lamb*np.dot(w,w))
示例#11
0
 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
示例#12
0
 def predictWithDataMatricesAlt(self,
                                X1pred,
                                X2pred,
                                row_inds=None,
                                col_inds=None):
     if row_inds == None:
         P = np.dot(np.dot(X1pred, self.W), X2pred.T)
         P = P.reshape(X1pred.shape[0] * X2pred.shape[0], 1, order='F')
     else:
         P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(
             self.W.reshape((self.W.shape[0] * self.W.shape[1], 1),
                            order='F'), X1pred, X2pred.T,
             np.array(row_inds, dtype=np.int32),
             np.array(col_inds, dtype=np.int32))
         #P = X1pred * self.W * X2pred.T
     return P
示例#13
0
 def dual_from_primal(self):
     w = self.W.ravel()
     X1 = self.resource_pool['xmatrix1']
     X2 = self.resource_pool['xmatrix2']
     rowind = np.array(self.label_row_inds, dtype = np.int32)
     colind = np.array(self.label_col_inds, dtype = np.int32)
     P = sparse_kronecker_multiplication_tools_python.x_gets_subset_of_A_kron_B_times_v(w, X2, X1.T, colind, rowind)
     #choose support vectors here?
     K1 = self.resource_pool['kmatrix1']
     K2 = self.resource_pool['kmatrix2']
     ddim = len(rowind)
     def mv(v):
         return sparse_kronecker_multiplication_tools_python.x_gets_C_times_M_kron_N_times_B_times_v(v, K2, K1, rowind, colind, rowind, colind)
     def rv(v):
         return sparse_kronecker_multiplication_tools_python.x_gets_C_times_M_kron_N_times_B_times_v(v, K2, K1, rowind, colind, rowind, colind)
     K = LinearOperator((ddim, ddim), matvec=mv, rmatvec=rv, dtype=np.float64)
     #A = lsmr(K, P, maxiter=100)[0]
     A = cg(K, P, maxiter=100)[0]
     return KernelPairwiseModel(A, rowind, colind)
示例#14
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