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()
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)
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)
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)
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)
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)
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()
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)