[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