예제 #1
0
def svm_train_classify(trimat_tr, seqids_tr, labels_tr, fullmat_te, options, icv):

	sys.stderr.write('..kernel building..\n')

	kernel=CustomKernel()
	kernel.set_triangle_kernel_matrix_from_triangle(trimat_tr)

	sys.stderr.write('..svm learning..\n')
	svm = svm_learn(kernel, labels_tr, options.svmC, options.epsilon, options.weight)

	global g_svm_bias
	g_svm_bias = svm.get_bias()

	if (options.alphaprefix != "") and (len(seqids_tr) > 0):
		save_cv_taining_result(svm, options, seqids_tr, icv)

	sys.stderr.write('..svm classifying..\n')
	kernel.set_full_kernel_matrix_from_full(fullmat_te)

	###################################################
	#for testing
	#alphas = svm.get_alphas()
	#svids  = svm.get_support_vectors()

	#for j in xrange(len(preds)):
	#	p = svm.get_bias()
	#	for i in xrange(len(alphas)):
	#		p += (alphas[i]*fullmat_te[int(svids[i]),j])

	#	print preds[j], p

	#sys.exit(0)
	###################################################

	return svm.classify().get_labels().tolist()
예제 #2
0
def runSVM(options, args):
    """
	set global variable
	"""
    if (options.ktype == 1 or options.ktype == 5
            or options.ktype == 6) and (options.kmerlen <= 8):
        global g_kmers
        global g_rcmap

        g_kmers = generate_kmers(options.kmerlen)
        g_rcmap = generate_rcmap_table(options.kmerlen, g_kmers)

    print 'Read genome sequence.\n'
    genome = preprocessGenome(args[0], options.subs)

    print 'Get sliding window.\n'
    seqs, sids = sliding_window(genome, options.window, options.step)
    print 'Get features and kernel.\n'

    if options.ktype == 1:
        get_features = get_spectrum_features
        get_kernel = get_spectrum_kernel
    elif options.ktype == 2:
        get_features = get_weighted_spectrum_features
        get_kernel = get_weighted_spectrum_kernel
    elif options.ktype == 3:
        get_features = get_char_features
        get_kernel = get_wd_kernel
    elif options.ktype == 5:
        get_features = get_char_features
        get_kernel = get_gaussian_kernel
    elif options.ktype == 6:
        get_features = get_char_features
        get_kernel = get_linear_kernel

    if options.ktype == 4:
        print 'This is custom kernel.\n'
        npos = len(sids)
        nneg = 0
        fullmat = get_full_matrix(options.matrixFile, npos, nneg)
        kernel = CustomKernel()
        kernel.set_full_kernel_matrix_from_full(fullmat)
    else:
        feats = get_features(seqs, options)
        kernel = get_kernel(feats, options)

    print '\nSVM training.\n'
    svm = svm_learn(kernel, options)

    processSVMOutput(svm, sids, options)
예제 #3
0
def kernel_custom_modular(dim=7):
    from numpy.random import rand, seed
    from numpy import array, float32
    from shogun.Features import RealFeatures
    from shogun.Kernel import CustomKernel

    seed(17)
    data = rand(dim, dim)
    feats = RealFeatures(data)
    symdata = data + data.T
    lowertriangle = array([
        symdata[(x, y)] for x in range(symdata.shape[1])
        for y in range(symdata.shape[0]) if y <= x
    ])

    kernel = CustomKernel()

    # once with float64's
    kernel.set_triangle_kernel_matrix_from_triangle(lowertriangle)
    km_triangletriangle = kernel.get_kernel_matrix()

    kernel.set_triangle_kernel_matrix_from_full(symdata)
    km_fulltriangle = kernel.get_kernel_matrix()

    kernel.set_full_kernel_matrix_from_full(symdata)
    km_fullfull = kernel.get_kernel_matrix()

    # now once with float32's
    data = array(data, dtype=float32)

    kernel.set_triangle_kernel_matrix_from_triangle(lowertriangle)
    km_triangletriangle = kernel.get_kernel_matrix()

    kernel.set_triangle_kernel_matrix_from_full(symdata)
    km_fulltriangle = kernel.get_kernel_matrix()

    kernel.set_full_kernel_matrix_from_full(symdata)
    km_fullfull = kernel.get_kernel_matrix()
    return km_fullfull, kernel
def classifier_custom_kernel_modular (C=1,dim=7):
	from shogun.Features import RealFeatures, BinaryLabels
	from shogun.Kernel import CustomKernel
	from shogun.Classifier import LibSVM

	from numpy import diag,ones,sign
	from numpy.random import rand,seed

	seed((C,dim))

	lab=sign(2*rand(dim) - 1)
	data=rand(dim, dim)
	symdata=data*data.T + diag(ones(dim))
    
	kernel=CustomKernel()
	kernel.set_full_kernel_matrix_from_full(data)
	labels=BinaryLabels(lab)
	svm=LibSVM(C, kernel, labels)
	svm.train()
	predictions =svm.apply() 
	out=svm.apply().get_labels()
	return svm,out
예제 #5
0
def classifier_custom_kernel_modular(C=1, dim=7):
    from shogun.Features import RealFeatures, Labels
    from shogun.Kernel import CustomKernel
    from shogun.Classifier import LibSVM

    from numpy import diag, ones, sign
    from numpy.random import rand, seed

    seed((C, dim))

    lab = sign(2 * rand(dim) - 1)
    data = rand(dim, dim)
    symdata = data * data.T + diag(ones(dim))

    kernel = CustomKernel()
    kernel.set_full_kernel_matrix_from_full(data)
    labels = Labels(lab)
    svm = LibSVM(C, kernel, labels)
    svm.train()
    predictions = svm.apply()
    out = svm.apply().get_labels()
    return svm, out
예제 #6
0
def kernel_custom_modular (dim=7):
	from numpy.random import rand, seed
	from numpy import array, float32
	from shogun.Features import RealFeatures
	from shogun.Kernel import CustomKernel

	seed(17)
	data=rand(dim, dim)
	feats=RealFeatures(data)
	symdata=data+data.T
	lowertriangle=array([symdata[(x,y)] for x in range(symdata.shape[1])
		for y in range(symdata.shape[0]) if y<=x])

	kernel=CustomKernel()

	# once with float64's
	kernel.set_triangle_kernel_matrix_from_triangle(lowertriangle)
	km_triangletriangle=kernel.get_kernel_matrix()

	kernel.set_triangle_kernel_matrix_from_full(symdata)
	km_fulltriangle=kernel.get_kernel_matrix()

	kernel.set_full_kernel_matrix_from_full(symdata)
	km_fullfull=kernel.get_kernel_matrix()

	# now once with float32's
	data=array(data,dtype=float32)

	kernel.set_triangle_kernel_matrix_from_triangle(lowertriangle)
	km_triangletriangle=kernel.get_kernel_matrix()

	kernel.set_triangle_kernel_matrix_from_full(symdata)
	km_fulltriangle=kernel.get_kernel_matrix()

	kernel.set_full_kernel_matrix_from_full(symdata)
	km_fullfull=kernel.get_kernel_matrix()
	return km_fullfull,kernel
예제 #7
0
def svm_train_classify(trimat_tr, seqids_tr, labels_tr, fullmat_te, options,
                       icv):

    sys.stderr.write('..kernel building..\n')

    kernel = CustomKernel()
    kernel.set_triangle_kernel_matrix_from_triangle(trimat_tr)

    sys.stderr.write('..svm learning..\n')
    svm = svm_learn(kernel, labels_tr, options.svmC, options.epsilon,
                    options.weight)

    global g_svm_bias
    g_svm_bias = svm.get_bias()

    if (options.alphaprefix != "") and (len(seqids_tr) > 0):
        save_cv_taining_result(svm, options, seqids_tr, icv)

    sys.stderr.write('..svm classifying..\n')
    kernel.set_full_kernel_matrix_from_full(fullmat_te)

    ###################################################
    #for testing
    #alphas = svm.get_alphas()
    #svids  = svm.get_support_vectors()

    #for j in xrange(len(preds)):
    #	p = svm.get_bias()
    #	for i in xrange(len(alphas)):
    #		p += (alphas[i]*fullmat_te[int(svids[i]),j])

    #	print preds[j], p

    #sys.exit(0)
    ###################################################

    return svm.classify().get_labels().tolist()
def custom ():
	print 'Custom'
	from numpy.random import rand
	from numpy import array
	from shogun.Features import RealFeatures
	from shogun.Kernel import CustomKernel

	dim=7
	data=rand(dim, dim)
	feats=RealFeatures(data)
	symdata=data+data.T
	lowertriangle=array([symdata[(x,y)] for x in xrange(symdata.shape[1])
		for y in xrange(symdata.shape[0]) if y<=x])

	kernel=CustomKernel()

	kernel.set_triangle_kernel_matrix_from_triangle(lowertriangle)
	km_triangletriangle=kernel.get_kernel_matrix()

	kernel.set_triangle_kernel_matrix_from_full(symdata)
	km_fulltriangle=kernel.get_kernel_matrix()

	kernel.set_full_kernel_matrix_from_full(data)
	km_fullfull=kernel.get_kernel_matrix()
km = wdk.get_kernel_matrix()

for i in xrange(N):
    for j in xrange(N):
        km[i,j] = km[i,j]*relate_tasks(i,j)
        #km = km*1.0

print km
#precompute kernel matrix using shogun
y = numpy.array(labels)
K = numpy.transpose(y.flatten() * (km*y.flatten()).transpose())
f = -numpy.ones(N)
C = 1.0

# Important!! QP does not accept ndarray as a type, it must be an array
p = QP(K, f, Aeq=y, beq=0, lb=numpy.zeros(N), ub=C*numpy.ones(N))
r = p.solve('cvxopt_qp', iprint = 0)

#print "cvxopt objective:", r.ff
print "externally modified kernel. objective:", r.ff

ck = CustomKernel()
ck.set_full_kernel_matrix_from_full(km)
#
svm = LibSVM(1, ck, lab)
svm.train()

print "externally modified kernel. objective:", svm.get_objective()


##################################################################

km = wdk.get_kernel_matrix()

for i in xrange(N):
    for j in xrange(N):
        km[i, j] = km[i, j] * relate_tasks(i, j)
        #km = km*1.0

print km
#precompute kernel matrix using shogun
y = numpy.array(labels)
K = numpy.transpose(y.flatten() * (km * y.flatten()).transpose())
f = -numpy.ones(N)
C = 1.0

# Important!! QP does not accept ndarray as a type, it must be an array
p = QP(K, f, Aeq=y, beq=0, lb=numpy.zeros(N), ub=C * numpy.ones(N))
r = p.solve('cvxopt_qp', iprint=0)

#print "cvxopt objective:", r.ff
print "externally modified kernel. objective:", r.ff

ck = CustomKernel()
ck.set_full_kernel_matrix_from_full(km)
#
svm = LibSVM(1, ck, lab)
svm.train()

print "externally modified kernel. objective:", svm.get_objective()
예제 #11
0
    def _train(self, train_data, param):
        """
        training procedure using training examples and labels
        
        @param train_data: Data relevant to SVM training
        @type train_data: dict<str, list<instances> >
        @param param: Parameters for the training procedure
        @type param: ParameterSvm
        """
        
                
        # merge data sets
        data = PreparedMultitaskData(train_data, shuffle=False)

                
        # create shogun data objects
        base_wdk = shogun_factory.create_kernel(data.examples, param)
        kernel_matrix = base_wdk.get_kernel_matrix()
        lab = shogun_factory.create_labels(data.labels)
        

        # fetch taxonomy from parameter object
        taxonomy = param.taxonomy.data

        # create name to leaf map
        nodes = taxonomy.get_all_nodes()


        ########################################################
        print "creating a kernel for each node:"
        ########################################################


        # assemble combined kernel
        from shogun.Kernel import CombinedKernel, CustomKernel
        
        combined_kernel = CombinedKernel()
        
        # indicator to which task each example belongs
        task_vector = data.task_vector_names
        
        for node in nodes:
            
            print "creating kernel for ", node.name
            
            # fetch sub-tree
            leaf_names = [leaf.name for leaf in node.get_leaves()]
            
            print "masking all entries other than:", leaf_names
            
            # init matrix
            kernel_matrix_node = numpy.zeros(kernel_matrix.shape)
            
            # fill matrix for node
            for (i, task_lhs) in enumerate(task_vector):
                for (j, task_rhs) in enumerate(task_vector):
                    
                    # only copy values, if both tasks are present in subtree
                    if task_lhs in leaf_names and task_rhs in leaf_names:
                        kernel_matrix_node[i,j] = kernel_matrix[i,j]
                    
            # create custom kernel
            kernel_node = CustomKernel()
            kernel_node.set_full_kernel_matrix_from_full(kernel_matrix_node)
            
            
            # append custom kernel to CombinedKernel
            combined_kernel.append_kernel(kernel_node)                
            
            print "------"
        

        print "subkernel weights:", combined_kernel.get_subkernel_weights()

        svm = None
                
        
        print "using MKL:", (param.transform >= 1.0)
        
        if param.transform >= 1.0:
        
        
            num_threads = 4

            
            svm = MKLClassification()
            
            svm.set_mkl_norm(param.transform)
            svm.set_solver_type(ST_GLPK) #DIRECT) #NEWTON)#ST_CPLEX)
        
            svm.set_C(param.cost, param.cost)
            
            svm.set_kernel(combined_kernel)
            svm.set_labels(lab)
            
            svm.parallel.set_num_threads(num_threads)
            #svm.set_linadd_enabled(False)
            #svm.set_batch_computation_enabled(False)
            
            svm.train()
        
            print "subkernel weights (after):", combined_kernel.get_subkernel_weights()    
            
        else:
            
            # create SVM (disable unsupported optimizations)
            svm = SVMLight(param.cost, combined_kernel, lab)
            svm.set_linadd_enabled(False)
            svm.set_batch_computation_enabled(False)
            
            svm.train()


        ########################################################
        print "svm objective:"
        print svm.get_objective()
        ########################################################
        
        
        # wrap up predictors
        svms = {}
            
        # use a reference to the same svm several times
        for task_id in train_data.keys():
            svms[task_id] = svm


        return svms
from numpy import *
from numpy.random import rand
from shogun.Features import RealFeatures, Labels
from shogun.Kernel import CustomKernel
from shogun.Classifier import LibSVM

C=1
dim=7

lab=sign(2*rand(dim) - 1)
data=rand(dim, dim)
symdata=data*data.T

kernel=CustomKernel()
kernel.set_full_kernel_matrix_from_full(data)
labels=Labels(lab)
svm=LibSVM(C, kernel, labels)
svm.train()
out=svm.classify().get_labels()