[Scipy-svn] r2050 - in trunk/Lib/sandbox/svm: . tests
scipy-svn at scipy.org
scipy-svn at scipy.org
Thu Jul 6 22:00:42 EDT 2006
Author: fullung
Date: 2006-07-06 21:00:33 -0500 (Thu, 06 Jul 2006)
New Revision: 2050
Added:
trunk/Lib/sandbox/svm/tests/test_kernel.py
Modified:
trunk/Lib/sandbox/svm/kernel.py
Log:
Fix kernels.
Modified: trunk/Lib/sandbox/svm/kernel.py
===================================================================
--- trunk/Lib/sandbox/svm/kernel.py 2006-07-07 01:03:44 UTC (rev 2049)
+++ trunk/Lib/sandbox/svm/kernel.py 2006-07-07 02:00:33 UTC (rev 2050)
@@ -6,24 +6,22 @@
'CustomKernel'
]
+import numpy as N
+
class LinearKernel:
- def __init__(self, dot):
- self.dot = dot
+ def __call__(self, x, y, dot):
+ return dot(x, y)
- def __call__(self, x, y):
- return self.dot(x, y)
-
class PolynomialKernel:
- def __init__(self, degree, gamma, coef0, dot):
+ def __init__(self, degree, gamma, coef0):
self.degree = degree
self.gamma = gamma
self.coef0 = coef0
- self.dot = dot
- def __call__(self, x, y):
- base = self.gamma*self.dot(x, y) + self.coef0
+ def __call__(self, x, y, dot):
+ base = self.gamma*dot(x, y) + self.coef0
tmp = base
- ret = 1.
+ ret = 1.0
t = self.degree
while t > 0:
if t % 2 == 1: ret *= tmp
@@ -32,27 +30,24 @@
return ret
class RBFKernel:
- def __init__(self, gamma, dot):
+ def __init__(self, gamma):
self.gamma = gamma
- self.dot = dot
- def __call__(self, x, y):
- z = self.dot(x, x) + self.dot(y, y) - 2*self.dot(x, y)
+ def __call__(self, x, y, dot):
+ z = dot(x, x) + dot(y, y) - 2*dot(x, y)
return N.exp(-self.gamma*z)
class SigmoidKernel:
- def __init__(self, gamma, coef0, dot):
+ def __init__(self, gamma, coef0):
self.gamma = gamma
self.coef0 = coef0
- self.dot = dot
- def kernel_sigmoid(x, y, gamma, coef0):
- return N.tanh(self.gamma*self.dot(x, y)+self.coef0)
+ def __call__(self, x, y, dot):
+ return N.tanh(self.gamma*dot(x, y)+self.coef0)
class CustomKernel:
- def __init__(self, f, dot):
+ def __init__(self, f):
self.f = f
- self.dot = dot
- def __call__(self, x, y):
+ def __call__(self, x, y, dot):
return self.f(x, y, dot)
Added: trunk/Lib/sandbox/svm/tests/test_kernel.py
===================================================================
--- trunk/Lib/sandbox/svm/tests/test_kernel.py 2006-07-07 01:03:44 UTC (rev 2049)
+++ trunk/Lib/sandbox/svm/tests/test_kernel.py 2006-07-07 02:00:33 UTC (rev 2050)
@@ -0,0 +1,41 @@
+from numpy.testing import *
+import numpy as N
+
+from svm.kernel import *
+
+class test_kernel(NumpyTestCase):
+ def check_linear_kernel(self):
+ kernel = LinearKernel()
+ dot = N.dot
+ x = N.array([2.])
+ self.assertAlmostEqual(kernel(x, x, dot), 4.)
+
+ def check_polynomial_kernel(self):
+ kernel = PolynomialKernel(degree=6, gamma=1.0, coef0=1.0)
+ dot = N.dot
+ x = N.array([2.])
+ self.assertAlmostEqual(kernel(x, x, dot), 15625.)
+
+ def check_sigmoid_kernel(self):
+ kernel = SigmoidKernel(gamma=0.2, coef0=0.3)
+ dot = N.dot
+ x = N.array([2.])
+ self.assertAlmostEqual(kernel(x, x, dot), 0.80049902)
+
+ def check_rbf_kernel(self):
+ kernel = RBFKernel(gamma=1.0)
+ dot = N.dot
+ x, y = N.array([2.]), N.array([3.])
+ self.assertAlmostEqual(kernel(x, y, dot), N.exp(-1.))
+
+ def check_custom_kernel(self):
+ def f(x, y, dot):
+ return 4 * dot(x, y)
+ kernel = CustomKernel(f)
+ def dot(x, y):
+ return 2 * N.dot(x, y)
+ x = N.array([2.])
+ self.assertAlmostEqual(kernel(x, x, dot), 32.0)
+
+if __name__ == '__main__':
+ NumpyTest().run()
More information about the Scipy-svn
mailing list