Неадекватное ядро ​​rbf? - PullRequest
0 голосов
/ 17 мая 2019

Я делаю прямую реализацию ядра, используя LIBLINEAR. Это хорошо работает, когда есть одна группа точек, которые нужно разделить. Однако, когда есть две точки, которые он должен отделить, он не может этого сделать.

Я пробовал две разные версии ядра, но второй тип был даже хуже, чем первый. Я предполагаю, что мне не хватает u-v компонента в этом ядре rbf, но когда я попытался вставить его, я просто не смог заставить его работать.

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

Даже если SVM-ядро rbf может разделить эти точки (LIBSVM, c = 10 ^ 4, gamma = 1): http://hep.ph.liv.ac.uk/~rcollins/stackQuestions/rbf_exp_two_gauss_svm_10+4.png

...