我正在使用LIBLINEAR进行直接内核实现。当需要将单个点集群分开时,它可以很好地工作。但是,当有两点需要分开时,它就无法做到。
我尝试了两种不同版本的内核,但是第二种类型甚至比第一种差。我以为我在这个rbf内核中缺少u-v组件,但是当我尝试将其放入其中时,我无法使其正常工作。
def KernelTransform(x, gammaVal): #direct kernel implementation
#first type of kernel, n diemnsional but reductive
rbfKernVals = np.exp(-gammaVal*(x ** 2).sum(1))
#print (rbfKernVals)
#second type of RBF kernel, works even worse than the first
#rbfKernVals = []
#for vals in x:
# #print (vals[0])
# #print (vals[1])
# rbfKernVal = np.exp(-gammaVal*np.linalg.norm(vals[0]-vals[1])**2 )
# #print (rbfKernVal)
# rbfKernVals.append(rbfKernVal)
#rbfKernVals = np.array(rbfKernVals)
##print (rbfKernVals)
return rbfKernVals
当有一个要分离的点时,它会很好地工作: http://hep.ph.liv.ac.uk/~rcollins/stackQuestions/Fine_detail_exp_one_gauss.png
当有两个失败时: http://hep.ph.liv.ac.uk/~rcollins/stackQuestions/exp_two_gauss_svm_cut.png
即使rbf内核SVM可以将这些点分开(LIBSVM,c = 10 ^ 4,gamma = 1): http://hep.ph.liv.ac.uk/~rcollins/stackQuestions/rbf_exp_two_gauss_svm_10+4.png