2017-09-26 114 views
1

我想为我的非线性可分数据实现SVM RBF内核。我定义我的内核:SVM自定义RBF内核IndexError

def rbf(va, vb): 
    gamma = 0.7 
    return exp(-gamma * linalg.norm(va - vb) ** 2) 
clf = svm.SVC(kernel=rbf) 
clf.fit(va, vb) 

它显示错误:

if X.shape[0] != X.shape[1]: IndexError: tuple index out of range

如何解决呢?

+1

你能打印'va'和'vb'的形状吗? –

+0

va是100x2,vb是100x1 – kashf34Kashf

回答

1

您的形状为vavb不匹配。他们需要具有相同的形状。 的RBF内核的语法应为以下形式:

def rbf(va,vb) , where va are the feature of sample,say X and vb are the features of sample say X`.

VA和VB而不是功能和标签。

你可以检查this link on Github类似的实现。您可以看到他将所有样本对传递给了rbf内核,而不是样本的特征和标签。去行号。 95.

+0

为什么这么说? va是生成标签vb(1列)的特征数(即(2列)) – kashf34Kashf

+0

@ kashf34Kashf我更新了我的答案。如果这个答案对你有帮助,你能否接受它作为正确的答案。 –