| @@ -4,7 +4,7 @@ These kernels are defined between pairs of vectors. | |||||
| import numpy as np | import numpy as np | ||||
| def deltakernel(x, y): | |||||
| def delta_kernel(x, y): | |||||
| """Delta kernel. Return 1 if x == y, 0 otherwise. | """Delta kernel. Return 1 if x == y, 0 otherwise. | ||||
| Parameters | Parameters | ||||
| @@ -26,7 +26,11 @@ def deltakernel(x, y): | |||||
| return x == y #(1 if condition else 0) | return x == y #(1 if condition else 0) | ||||
| def gaussiankernel(x, y, gamma=None): | |||||
| def deltakernel(x, y): | |||||
| return delta_kernel(x, y) | |||||
| def gaussian_kernel(x, y, gamma=None): | |||||
| """Gaussian kernel. | """Gaussian kernel. | ||||
| Compute the rbf (gaussian) kernel between x and y: | Compute the rbf (gaussian) kernel between x and y: | ||||
| @@ -60,8 +64,15 @@ def gaussiankernel(x, y, gamma=None): | |||||
| return np.exp((np.sum(np.subtract(x, y) ** 2)) * -gamma) | return np.exp((np.sum(np.subtract(x, y) ** 2)) * -gamma) | ||||
| def gaussiankernel(x, y, gamma=None): | |||||
| return gaussian_kernel(x, y, gamma=gamma) | |||||
| def polynomialkernel(x, y, d=1, c=0): | |||||
| def polynomial_kernel(x, y, gamma=1, coef0=0, d=1): | |||||
| return (np.dot(x, y) * gamma + coef0) ** d | |||||
| def highest_polynomial_kernel(x, y, d=1, c=0): | |||||
| """Polynomial kernel. | """Polynomial kernel. | ||||
| Compute the polynomial kernel between x and y: | Compute the polynomial kernel between x and y: | ||||
| @@ -82,7 +93,11 @@ def polynomialkernel(x, y, d=1, c=0): | |||||
| return np.dot(x, y) ** d + c | return np.dot(x, y) ** d + c | ||||
| def linearkernel(x, y): | |||||
| def polynomialkernel(x, y, d=1, c=0): | |||||
| return highest_polynomial_kernel(x, y, d=d, c=c) | |||||
| def linear_kernel(x, y): | |||||
| """Polynomial kernel. | """Polynomial kernel. | ||||
| Compute the polynomial kernel between x and y: | Compute the polynomial kernel between x and y: | ||||
| @@ -103,6 +118,61 @@ def linearkernel(x, y): | |||||
| return np.dot(x, y) | return np.dot(x, y) | ||||
| def linearkernel(x, y): | |||||
| return linear_kernel(x, y) | |||||
| def cosine_kernel(x, y): | |||||
| return np.dot(x, y) / (np.abs(x) * np.abs(y)) | |||||
| def sigmoid_kernel(x, y, gamma=None, coef0=1): | |||||
| if gamma is None: | |||||
| gamma = 1.0 / len(x) | |||||
| k = np.dot(x, y) | |||||
| k *= gamma | |||||
| k += coef0 | |||||
| k = np.tanh(k) | |||||
| # k = np.tanh(k, k) # compute tanh in-place | |||||
| return k | |||||
| def laplacian_kernel(x, y, gamma=None): | |||||
| if gamma is None: | |||||
| gamma = 1.0 / len(x) | |||||
| k = -gamma * np.abs(np.subtract(x, y)) | |||||
| k = np.exp(k) | |||||
| return k | |||||
| def chi2_kernel(x, y, gamma=1.0): | |||||
| k = np.divide(np.subtract(x, y) ** 2, np.add(x, y)) | |||||
| k = np.sum(k) | |||||
| k *= -gamma | |||||
| return np.exp(k) | |||||
| def exponential_kernel(x, y, gamma=None): | |||||
| if gamma is None: | |||||
| gamma = 1.0 / len(x) | |||||
| return np.exp(np.dot(x, y) * gamma) | |||||
| def intersection_kernel(x, y): | |||||
| return np.sum(np.minimum(x, y)) | |||||
| def multiquadratic_kernel(x, y, c=0): | |||||
| return np.sqrt((np.sum(np.subtract(x, y) ** 2)) + c) | |||||
| def inverse_multiquadratic_kernel(x, y, c=0): | |||||
| return 1 / multiquadratic_kernel(x, y, c=c) | |||||
| def kernelsum(k1, k2, d11, d12, d21=None, d22=None, lamda1=1, lamda2=1): | def kernelsum(k1, k2, d11, d12, d21=None, d22=None, lamda1=1, lamda2=1): | ||||
| """Sum of a pair of kernels. | """Sum of a pair of kernels. | ||||