def kernel_dist(kernel=linear, **kw):
"""Generic kernel-induced distance metric.
To use, `partially` apply this function with a kernel argument.
Examples
--------
>>> from functools import partial
>>> dist = partial(kernel_dist, kernel=sigmoid)
"""
if kernel is None: # Don't use a kernel!
return dist.euclidean
elif getattr(kernel, "__name__") == "gaussian":
# We have a 'shortcut' for Gaussian kernels... this is kinda hacky
# But maybe worth it given the speedup our shortcut gets us?
return lambda x, y: 2 - 2*gaussian(x, y, kw.get("sigma", 1))
else:
kern = partial(kernel, **kw)
return lambda x, y: kern(x, x) - 2*kern(x, y) + kern(y, y)
评论列表
文章目录