[Scipy-svn] r2047 - trunk/Lib/sandbox/svm

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Jul 6 21:02:20 EDT 2006


Author: fullung
Date: 2006-07-06 20:02:09 -0500 (Thu, 06 Jul 2006)
New Revision: 2047

Removed:
   trunk/Lib/sandbox/svm/data.py
Modified:
   trunk/Lib/sandbox/svm/dataset.py
Log:
Datasets.


Deleted: trunk/Lib/sandbox/svm/data.py
===================================================================
--- trunk/Lib/sandbox/svm/data.py	2006-07-07 01:01:27 UTC (rev 2046)
+++ trunk/Lib/sandbox/svm/data.py	2006-07-07 01:02:09 UTC (rev 2047)
@@ -1,50 +0,0 @@
-__all__ = [
-    'LinearData',
-    'LinearOneClassData',
-    ]
-
-import libsvm
-
-import numpy as N
-
-class LinearData:
-    def __init__(self):
-        self.kernel_type = libsvm.LINEAR
-
-    def convert_train_data(self, data):
-        svm_data = []
-        for label, x in data:
-            y = N.empty((len(x)+1,), dtype=libsvm.svm_node_dtype)
-            y['index'][:-1] = N.arange(1, len(x)+1)
-            y['value'][:-1] = x
-            y[-1] = (-1, 0.)
-            svm_data.append((label, y))
-        return svm_data
-
-    def convert_test_data(self, x):
-        y = N.empty((len(x)+1,), dtype=libsvm.svm_node_dtype)
-        y['index'][:-1] = N.arange(1, len(x)+1)
-        y['value'][:-1] = x
-        y[-1] = (-1, 0.)
-        return y
-
-class LinearOneClassData:
-    def __init__(self):
-        self.kernel_type = libsvm.LINEAR
-
-    def convert_train_data(self, data):
-        svm_data = []
-        for x in data:
-            y = N.empty((len(x)+1,), dtype=libsvm.svm_node_dtype)
-            y['index'][:-1] = 0
-            y['value'][:-1] = x
-            y[-1] = (-1, 0.)
-            svm_data.append((0, y))
-        return svm_data
-
-    def convert_test_data(self, x):
-        y = N.empty((len(x)+1,), dtype=libsvm.svm_node_dtype)
-        y['index'][:-1] = 0
-        y['value'][:-1] = x
-        y[-1] = (-1, 0.)
-        return y

Modified: trunk/Lib/sandbox/svm/dataset.py
===================================================================
--- trunk/Lib/sandbox/svm/dataset.py	2006-07-07 01:01:27 UTC (rev 2046)
+++ trunk/Lib/sandbox/svm/dataset.py	2006-07-07 01:02:09 UTC (rev 2047)
@@ -1,72 +1,50 @@
 __all__ = [
     'LibSvmRegressionDataSet',
     'LibSvmClassificationDataSet',
-    'LibSvmOneClassDataSet'
+    'LibSvmOneClassDataSet',
+    'LibSvmTestDataSet'
     ]
 
 import numpy as N
 
 import libsvm
 
-def svm_node_dot(x, y):
-    # associate node indexes with array indexes
-    xidx = dict(zip(x['index'][:-1],range(0,len(x))))
-    yidx = dict(zip(y['index'][:-1],range(0,len(y))))
-    # indexes in either vector
-    indexes = N.unique(N.hstack([x['index'],y['index']]))
-    z = 0.
-    for j in indexes:
-        if j in xidx and j in yidx:
-            # dot if index is present in both vectors
-            z += x['value'][xidx[j]]*y['value'][yidx[j]]
-    return z
-
 class LibSvmDataSet:
-    def __init__(self, data, kernel):
+    def __init__(self, data):
         self.data = data
-        self.kernel = kernel
 
-    def precompute(self):
-        n = 1 + len(data) + 1
-        a = N.zeros((n,), dtype=svm_node_dtype)
-        a[-1] = -1, 0. # end of record marker
-        grammat = [a.copy() for i in range(len(data))]
-        for i, a in enumerate(grammat):
-            a[0] = 0, i + 1 # id
-        for i in range(len(data)):
-            for j in range(i, len(data)):
-                z = self.kernel(data[i], N.transpose(data[j]))
-                grammat[i][j+1]['value'] = z
-                grammat[j][i+1]['value'] = z
-        return LibSvmPrecomputedDataSet(grammat, self.data, self.kernel)
+    def getgamma(self):
+        maxlen = 0
+        for y, x in self.data:
+            maxlen = N.maximum(maxlen, x['index'].max())
+        return 1.0 / maxlen
+    gamma = property(getgamma, 'Gamma parameter for RBF kernel')
 
-class LibSvmPrecomputedDataSet:
-    def __init__(self, grammat, data, kernel):
-        self.grammat = grammat
-        self.data = data
-        self.kernel = kernel
-
-    def extend(self, data):
-        raise NotImplementedError
-
 class LibSvmRegressionDataSet(LibSvmDataSet):
-    def __init__(self, data):
-        f = lambda x: (x[0], convert_to_svm_node(x[1]))
-        LibSvmDataSet.__init__(self, map(f, data))
+    def __init__(self, origdata):
+        data = map(lambda x: (x[0], convert_to_svm_node(x[1])), origdata)
+        LibSvmDataSet.__init__(self, data)
 
 class LibSvmClassificationDataSet(LibSvmDataSet):
-    def __init__(self, data):
-        labels = N.array(map(lambda x: x[0]), dtype=N.intc)
+    def __init__(self, origdata):
+        labels = N.array(map(lambda x: x[0], origdata), dtype=N.intc)
         assert N.alltrue(labels >= 0), \
             'labels must be non-negative integers'
-        f = lambda x: (x[0],convert_to_svm_node(x[1]))
-        LibSvmDataSet.__init__(self, map(f, data))
+        labels.sort()
+        self.labels = labels
 
+        data = map(lambda x: (x[0],convert_to_svm_node(x[1])), origdata)
+        LibSvmDataSet.__init__(self, data)
+
 class LibSvmOneClassDataSet(LibSvmDataSet):
-    def __init__(self, data):
-        f = map(lambda x: tuple([0,convert_to_svm_node(x)]))
-        LibSvmDataSet.__init__(self, map(f, data))
+    def __init__(self, origdata):
+        data = map(lambda x: tuple([0,convert_to_svm_node(x)]), origdata)
+        LibSvmDataSet.__init__(self, data)
 
+class LibSvmTestDataSet:
+    def __init__(self, origdata):
+        self.data = map(lambda x: convert_to_svm_node(x), origdata)
+
 def convert_to_svm_node(x):
     y = N.empty(len(x)+1, dtype=libsvm.svm_node_dtype)
     y[-1] = (-1, 0.)




More information about the Scipy-svn mailing list