示例#1
0
 def __init__(self, X, regparam=1.0, number_of_clusters=2, kernel='LinearKernel', basis_vectors=None, Y = None, fixed_indices=None, callback=None,  **kwargs):
     kwargs['X'] = X 
     kwargs['kernel'] = kernel
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.svals = np.mat(self.svdad.svals)
     self.svecs = np.mat(self.svdad.rsvecs)
     self.callbackfun = callback
     self.regparam = regparam
     self.constraint = 0
     self.labelcount = number_of_clusters
     self.size = X.shape[0] 
     #if self.labelcount == 2:
     #    self.oneclass = True
     #else:
     #    self.oneclass = False
     
     if Y is None:
         self.classvec = np.zeros(self.size, np.int)
     else:
         self.classvec = Y
     #self.size = self.classvec.shape[0]
     self.Y = -np.ones((self.size, self.labelcount))
     self.classcounts = np.zeros((self.labelcount), dtype = np.int32)
     for i in range(self.size):
         clazzind = self.classvec[i]
         self.Y[i, clazzind] = 1
         self.classcounts[clazzind] = self.classcounts[clazzind] + 1
     
     self.fixedindices = []
     if fixed_indices is not None:
         self.fixedindices = fixed_indices
     self.train()
示例#2
0
 def __init__(self, X, regparam=1.0, number_of_clusters=2, kernel='LinearKernel', basis_vectors=None, Y = None, fixed_indices=None, callback=None,  **kwargs):
     kwargs['X'] = X 
     kwargs['kernel'] = kernel
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.svals = np.mat(self.svdad.svals)
     self.svecs = np.mat(self.svdad.rsvecs)
     self.callbackfun = callback
     self.regparam = regparam
     self.constraint = 0
     self.labelcount = number_of_clusters
     self.size = X.shape[0] 
     #if self.labelcount == 2:
     #    self.oneclass = True
     #else:
     #    self.oneclass = False
     
     if Y is None:
         self.classvec = np.zeros(self.size, np.int)
     else:
         self.classvec = Y
     #self.size = self.classvec.shape[0]
     self.Y = -np.ones((self.size, self.labelcount))
     self.classcounts = np.zeros((self.labelcount), dtype = np.int32)
     for i in range(self.size):
         clazzind = self.classvec[i]
         self.Y[i, clazzind] = 1
         self.classcounts[clazzind] = self.classcounts[clazzind] + 1
     
     self.fixedindices = []
     if fixed_indices is not None:
         self.fixedindices = fixed_indices
     self.train()
示例#3
0
 def __init__(self,
              X,
              Y,
              regparam=1.0,
              kernel='LinearKernel',
              basis_vectors=None,
              **kwargs):
     Y = array_tools.as_2d_array(Y)
     self.Y = np.mat(Y)
     if X.shape[0] != Y.shape[0]:
         raise Exception("First dimension of X and Y must be the same")
     if basis_vectors is not None:
         if X.shape[1] != basis_vectors.shape[1]:
             raise Exception(
                 "Number of columns for X and basis_vectors must be the same"
             )
     kwargs["bias"] = 0.
     kwargs['kernel'] = kernel
     kwargs['X'] = X
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.regparam = regparam
     self.svals = np.mat(self.svdad.svals)
     self.svecs = np.mat(self.svdad.rsvecs)
     self.size = self.Y.shape[0]
     self.solve(self.regparam)
示例#4
0
 def __init__(self, X, Y, qids, regparam = 1.0, kernel='LinearKernel', basis_vectors = None, **kwargs):
     kwargs["bias"] = 0.
     kwargs['kernel'] =  kernel
     kwargs['X'] = X
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.Y = np.mat(array_tools.as_2d_array(Y))
     self.regparam = regparam
     self.svals = np.mat(self.svdad.svals)
     self.svecs = self.svdad.rsvecs
     self.size = self.Y.shape[0]
     self.size = self.Y.shape[0]
     self.qids = map_qids(qids)
     self.qidlist = qids_to_splits(self.qids)
     self.solve(self.regparam)
示例#5
0
 def __init__(self, X, Y, regparam = 1.0, kernel='LinearKernel', basis_vectors = None, **kwargs):
     self.Y = array_tools.as_2d_array(Y)
     if X.shape[0] != Y.shape[0]:
         raise Exception("First dimension of X and Y must be the same")
     if basis_vectors is not None:
         if X.shape[1] != basis_vectors.shape[1]:
             raise Exception("Number of columns for X and basis_vectors must be the same")
     kwargs['X'] = X
     kwargs['kernel'] = kernel
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.regparam = regparam
     self.svals = np.mat(self.svdad.svals)
     self.svecs = np.mat(self.svdad.rsvecs)
     self.size = self.Y.shape[0]
     self.solve(self.regparam)   
    def __init__(
        self, X, pairs_start_inds, pairs_end_inds, regparam=1.0, kernel="LinearKernel", basis_vectors=None, **kwargs
    ):

        kwargs["kernel"] = kernel
        kwargs["X"] = X
        if basis_vectors is not None:
            kwargs["basis_vectors"] = basis_vectors
        self.regparam = regparam
        self.pairs = np.vstack([pairs_start_inds, pairs_end_inds]).T
        self.svdad = adapter.createSVDAdapter(**kwargs)
        self.svals = np.mat(self.svdad.svals)
        self.svecs = self.svdad.rsvecs
        self.results = {}
        self.X = csc_matrix(X)
        self.bias = 0.0
        self.results = {}
        self.solve(regparam)
示例#7
0
 def __init__(self,
              X,
              Y,
              qids,
              regparam=1.0,
              kernel='LinearKernel',
              basis_vectors=None,
              **kwargs):
     kwargs["bias"] = 0.
     kwargs['kernel'] = kernel
     kwargs['X'] = X
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.Y = np.mat(array_tools.as_2d_array(Y))
     self.regparam = regparam
     self.svals = np.mat(self.svdad.svals)
     self.svecs = self.svdad.rsvecs
     self.size = self.Y.shape[0]
     self.size = self.Y.shape[0]
     self.qids = map_qids(qids)
     self.qidlist = qids_to_splits(self.qids)
     self.solve(self.regparam)
示例#8
0
    def __init__(self,
                 X,
                 pairs_start_inds,
                 pairs_end_inds,
                 regparam=1.0,
                 kernel='LinearKernel',
                 basis_vectors=None,
                 **kwargs):

        kwargs['kernel'] = kernel
        kwargs['X'] = X
        if basis_vectors is not None:
            kwargs["basis_vectors"] = basis_vectors
        self.regparam = regparam
        self.pairs = np.vstack([pairs_start_inds, pairs_end_inds]).T
        self.svdad = adapter.createSVDAdapter(**kwargs)
        self.svals = np.mat(self.svdad.svals)
        self.svecs = self.svdad.rsvecs
        self.results = {}
        self.X = csc_matrix(X)
        self.bias = 0.
        self.results = {}
        self.solve(regparam)
示例#9
0
 def __init__(self, X, regparam=1.0, number_of_clusters=2, kernel='LinearKernel', basis_vectors=None, Y = None, fixed_indices=None, callback=None,  **kwargs):
     kwargs['X'] = X 
     kwargs['kernel'] = kernel
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.svals = np.mat(self.svdad.svals)
     self.svecs = self.svdad.rsvecs
     self.regparam = regparam
     self.constraint = 0
     #if not kwargs.has_key('number_of_clusters'):
     #    raise Exception("Parameter 'number_of_clusters' must be given.")
     self.labelcount = number_of_clusters
     if self.labelcount == 2:
         self.oneclass = True
     else:
         self.oneclass = False
     self.callbackfun = callback
     if Y is not None:
         Y_orig = array_tools.as_array(Y)
         #if Y_orig.shape[1] == 1:
         if len(Y_orig.shape) == 1:
             self.Y = np.zeros((Y_orig.shape[0], 2))
             self.Y[:, 0] = Y_orig
             self.Y[:, 1] = - Y_orig
             self.oneclass = True
         else:
             self.Y = Y_orig.copy()
             self.oneclass = False
         for i in range(self.Y.shape[0]):
             largestind = 0
             largestval = self.Y[i, 0]
             for j in range(self.Y.shape[1]):
                 if self.Y[i, j] > largestval:
                     largestind = j
                     largestval = self.Y[i, j]
                 self.Y[i, j] = -1.
             self.Y[i, largestind] = 1.
     else:
         size = self.svecs.shape[0]
         ysize = self.labelcount
         if self.labelcount is None: self.labelcount = 2
         self.Y = RandomLabelSource(size, ysize).readLabels()
     self.size = self.Y.shape[0]
     self.labelcount = self.Y.shape[1]
     self.classvec = - np.ones((self.size), dtype = np.int32)
     self.classcounts = np.zeros((self.labelcount), dtype = np.int32)
     for i in range(self.size):
         clazzind = 0
         largestlabel = self.Y[i, 0]
         for j in range(self.labelcount):
             if self.Y[i, j] > largestlabel:
                 largestlabel = self.Y[i, j]
                 clazzind = j
         self.classvec[i] = clazzind
         self.classcounts[clazzind] = self.classcounts[clazzind] + 1
     
     self.svecs_list = []
     for i in range(self.size):
         self.svecs_list.append(self.svecs[i].T)
     self.fixedindices = []
     if fixed_indices is not None:
         self.fixedindices = fixed_indices
     else:
         self.fixedindices = []
     self.results = {}
     self.solve(self.regparam)
 def __init__(self, X, regparam=1.0, number_of_clusters=2, kernel='LinearKernel', basis_vectors=None, Y = None, fixed_indices=None, callback=None,  **kwargs):
     kwargs['X'] = X 
     kwargs['kernel'] = kernel
     if basis_vectors is not None:
         kwargs['basis_vectors'] = basis_vectors
     self.svdad = adapter.createSVDAdapter(**kwargs)
     self.svals = np.mat(self.svdad.svals)
     self.svecs = np.mat(self.svdad.rsvecs)
     self.callbackfun = callback
     self.regparam = regparam
     self.constraint = 0
     self.labelcount = number_of_clusters
     self.size = X.shape[0] 
     #if self.labelcount == 2:
     #    self.oneclass = True
     #else:
     #    self.oneclass = False
     
     if Y is None:
         self.classvec = np.zeros(self.size, np.int)
     else:
         self.classvec = Y
     #self.size = self.classvec.shape[0]
     self.Y = -np.ones((self.size, self.labelcount))
     self.classcounts = np.zeros((self.labelcount), dtype = np.int32)
     for i in range(self.size):
         clazzind = self.classvec[i]
         self.Y[i, clazzind] = 1
         self.classcounts[clazzind] = self.classcounts[clazzind] + 1
     
     self.fixedindices = []
     if fixed_indices is not None:
         self.fixedindices = fixed_indices
     
     #Cached results
     self.evals = np.multiply(self.svals, self.svals)
     self.newevals = 1. / (self.evals + self.regparam)
     newevalslamtilde = np.multiply(self.evals, self.newevals)
     self.D = np.sqrt(newevalslamtilde)
     #self.D = -newevalslamtilde
     
     self.VTY = self.svecs.T * self.Y
     self.DVTY = np.multiply(self.D.T, self.svecs.T * self.Y)
     
     self.sqrtR = np.multiply(np.sqrt(newevalslamtilde), self.svecs)
     
     #self.R = self.svecs * multiply(newevalslamtilde.T, self.svecs.T)
     
     '''
     #Global variation
     self.R = self.sqrtR * self.sqrtR.T
     self.minus_diagRx2 = - 2 * np.diag(self.R)
     '''
     #Space efficient variation
     self.R = None
     self.minus_diagRx2 = - 2 * np.array(np.sum(np.multiply(self.sqrtR, self.sqrtR), axis = 1)).reshape((self.size))
     #'''
     
     self.RY = self.sqrtR * (self.sqrtR.T * self.Y)
     self.Y_Schur_RY = np.multiply(self.Y, self.RY)
     
     self.classFitnessList = []
     for i in range(self.labelcount):
         #DVTY_i = DVTY[:,i]
         #self.DVTY_list.append(DVTY_i)
         YTRY_i = self.Y[:,i].T * self.RY[:,i]
         #self.YTRY_list.append(YTRY_i)
         fitness_i = self.size - YTRY_i
         self.classFitnessList.append(fitness_i[0, 0])
     self.classFitnessRowVec = np.array(self.classFitnessList)
     
     if not self.callbackfun is None:
         self.callbackfun.callback(self)
     
     #Initial working set contains all points
     self.new_working_set(list(range(self.size)))
     self.updateA()
示例#11
0
    def __init__(self,
                 X,
                 regparam=1.0,
                 number_of_clusters=2,
                 kernel='LinearKernel',
                 basis_vectors=None,
                 Y=None,
                 fixed_indices=None,
                 callback=None,
                 **kwargs):
        kwargs['X'] = X
        kwargs['kernel'] = kernel
        if basis_vectors is not None:
            kwargs['basis_vectors'] = basis_vectors
        self.svdad = adapter.createSVDAdapter(**kwargs)
        self.svals = np.mat(self.svdad.svals)
        self.svecs = np.mat(self.svdad.rsvecs)
        self.callbackfun = callback
        self.regparam = regparam
        self.constraint = 0
        self.labelcount = int(number_of_clusters)

        if self.labelcount == 2:
            self.oneclass = True
        else:
            self.oneclass = False
        if Y is not None:
            Y_orig = array_tools.as_array(Y)
            #if Y_orig.shape[1] == 1:
            if len(Y_orig.shape) == 1:
                self.Y = np.zeros((Y_orig.shape[0], 2))
                self.Y[:, 0] = Y_orig
                self.Y[:, 1] = -Y_orig
                self.oneclass = True
            else:
                self.Y = Y_orig.copy()
                self.oneclass = False
            for i in range(self.Y.shape[0]):
                largestind = 0
                largestval = self.Y[i, 0]
                for j in range(self.Y.shape[1]):
                    if self.Y[i, j] > largestval:
                        largestind = j
                        largestval = self.Y[i, j]
                    self.Y[i, j] = -1.
                self.Y[i, largestind] = 1.
        else:
            size = self.svecs.shape[0]
            ysize = self.labelcount
            if self.labelcount is None: self.labelcount = 2
            self.Y = RandomLabelSource(size, ysize).readLabels()
        self.size = self.Y.shape[0]
        self.labelcount = self.Y.shape[1]
        self.classvec = -np.ones((self.size), dtype=np.int32)
        self.lockvec = np.zeros((self.size), dtype=np.int32)
        self.classcounts = np.zeros((self.labelcount), dtype=np.int32)
        for i in range(self.size):
            clazzind = 0
            largestlabel = self.Y[i, 0]
            for j in range(self.labelcount):
                if self.Y[i, j] > largestlabel:
                    largestlabel = self.Y[i, j]
                    clazzind = j
            self.classvec[i] = clazzind
            self.classcounts[clazzind] = self.classcounts[clazzind] + 1

        self.svecs_list = []
        for i in range(self.size):
            self.svecs_list.append(self.svecs[i].T)
        self.fixedindices = []
        if fixed_indices is not None:
            self.fixedindices = fixed_indices
        else:
            self.fixedindices = []
        self.results = {}
        self.solve(self.regparam)