[Scipy-svn] r2123 - in trunk/Lib/sandbox/svm: . tests

scipy-svn at scipy.org scipy-svn at scipy.org
Tue Jul 25 05:33:36 EDT 2006


Author: fullung
Date: 2006-07-25 04:32:55 -0500 (Tue, 25 Jul 2006)
New Revision: 2123

Modified:
   trunk/Lib/sandbox/svm/dataset.py
   trunk/Lib/sandbox/svm/predict.py
   trunk/Lib/sandbox/svm/tests/test_regression.py
Log:
Fix libsvm prediction with precomputed kernels.


Modified: trunk/Lib/sandbox/svm/dataset.py
===================================================================
--- trunk/Lib/sandbox/svm/dataset.py	2006-07-25 07:48:25 UTC (rev 2122)
+++ trunk/Lib/sandbox/svm/dataset.py	2006-07-25 09:32:55 UTC (rev 2123)
@@ -73,9 +73,12 @@
                 grammat[i][j + 1] = 0, z
                 grammat[j][i + 1] = 0, z
 
-    def __getitem__(self, id):
-        return self.iddatamap[id]
+    def __len__(self):
+        return len(self.origdata)
 
+    def __getitem__(self, key):
+        return self.iddatamap[key]
+
     def getdata(self):
         return zip(map(lambda x: x[0], self.origdata), self.grammat)
     data = property(getdata)

Modified: trunk/Lib/sandbox/svm/predict.py
===================================================================
--- trunk/Lib/sandbox/svm/predict.py	2006-07-25 07:48:25 UTC (rev 2122)
+++ trunk/Lib/sandbox/svm/predict.py	2006-07-25 09:32:55 UTC (rev 2123)
@@ -15,12 +15,9 @@
         self.kernel = kernel
         modelc = model.contents
         if modelc.param.kernel_type == libsvm.PRECOMPUTED:
-            ids = [int(modelc.SV[i][0].value) for i in range(modelc.l)]
-            support_vectors = [dataset[id] for id in ids]
-            self.support_vectors = support_vectors
-            # fix support vector ids in precomputed data
-            for i in range(modelc.l):
-                modelc.SV[i][0].value = i
+            self.dataset = dataset
+            self.sv_ids = [int(modelc.SV[i][0].value)
+                           for i in range(modelc.l)]
             self._transform_input = self._create_gramvec
         else:
             self._transform_input = lambda x: x
@@ -29,10 +26,11 @@
         libsvm.svm_destroy_model(self.model)
 
     def _create_gramvec(self, x):
-        gramvec = N.zeros((self.model.contents.l,),
+        gramvec = N.zeros((len(self.dataset)+1,),
                           dtype=libsvm.svm_node_dtype)
-        for i, sv in enumerate(self.support_vectors):
-            gramvec[i]['value'] = self.kernel(x, sv, svm_node_dot)
+        for sv_id in self.sv_ids:
+            sv = self.dataset[sv_id]
+            gramvec[sv_id]['value'] = self.kernel(x, sv, svm_node_dot)
         return gramvec
 
     def predict(self, x):

Modified: trunk/Lib/sandbox/svm/tests/test_regression.py
===================================================================
--- trunk/Lib/sandbox/svm/tests/test_regression.py	2006-07-25 07:48:25 UTC (rev 2122)
+++ trunk/Lib/sandbox/svm/tests/test_regression.py	2006-07-25 09:32:55 UTC (rev 2123)
@@ -129,7 +129,7 @@
             fitargs = [
                 (trndata, LibSvmPredictor),
                 (trndata, LibSvmPythonPredictor),
-                #(pctrndata, LibSvmPredictor),
+                (pctrndata, LibSvmPredictor),
                 (pctrndata, LibSvmPythonPredictor)
                 ]
             for model in models:




More information about the Scipy-svn mailing list