sklearn SVM自定义核函数
我需要在 sklearn
中实现一个自定义的核函数。
这个核函数是一个自定义的线性核:
def my_kernel(x, y):
return np.dot(x, y.T)
但是我在实现类似 RBF 核的东西时遇到了困难。请问在 sklearn 中可以做自定义核函数吗?
我试过这个:
def my_kernel(x, y):
gamma = 0.01
return np.exp((gamma* np.power(np.linalg.norm(x-y),2)))`
但是没有成功。
(我知道 RBF 核已经有现成的实现,但我需要手动实现,因为我需要添加一些参数)
2 个回答
2
我实现了类似这样的东西
import numpy as np
from sklearn.metrics.pairwise import euclidean_distances
def gaussian_kernel(X, Y):
kernel = euclidean_distances(X, Y) ** 2
kernel = kernel*(-1/(self.gamma**2))
kernel = np.exp(kernel)
return kernel
然后我用我定义的核函数调用了svm
from sklearn import svm
clf = svm.SVC(kernel=gaussian_kernel, max_iter = 10000)
clf.fit(X_train, y_train)
这看起来运行得不错。唯一我没做到的就是把一个超参数从svm传递到我实现的核函数,所以我开始选择在全局定义这个超参数作为一种变通方法。
正如你所看到的,我定义了一个self.gamma,我想调整这个值,但在初始化svm时定义的gamma并没有传递到我的函数里。
3