我想使用sklearn.kernel\u脊.KernelRidge函数的一个自定义内核(wendland kernel),它不是用python实现的,所以我必须提供一个可调用的函数(我想避免使用'precomputed'选项,以便使它与我的其他模型保持一致)。问题是,callable必须返回一个float数,因此对于每个数据点调用它一次,这会导致真正的缓慢训练。你知道吗
看一个类似的设置模型,即。支持向量机.SVR,必须提供一个可调用的内核函数,该函数一次返回整个内核矩阵,这使得它的速度更快。你知道吗
所以我的问题是,是否有可能让KernelRidge函数接受一个可调用的函数,它在一步中提供gram矩阵,从而加快进程?还有其他选择吗?你知道吗
import numpy as np
from sklearn.kernel_ridge import KernelRidge
from sklearn.metrics.pairwise import check_pairwise_arrays, euclidean_distances
def Wendland_kernel(eps=None):
#Kernel I want to use und am allowed to use with SVM.SVR
def Wendland_gram_intern(X, Y=None, eps=eps):
X, Y = check_pairwise_arrays(X,Y)
if eps is None:
eps = 1.0 / X.shape[1]
K = euclidean_distances(X, Y, squared=False)
K = 1 - eps*K
return np.maximum(K,0)**2
return Wendland_gram_intern
def Wendland_single(eps=None):
#Kernel I have to use
def Wendland_single_intern(x1, y1, eps=eps):
K = np.linalg.norm(x1-y1)
K = 1 - eps*K
return np.maximum(K,0)**2
return Wendland_single_intern
X = np.random.random((10,2))
y = np.random.normal(size=(10,))
clf = KernelRidge(kernel=Wendland_single(eps=2.5))
clf.fit(X, y)
print(clf.predict([[0.5,0.5]]))
目前没有回答
相关问题 更多 >
编程相关推荐