[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