1
2 import numpy
3
4 from PyML.classifiers.baseClassifiers import Classifier
5
6
8 """
9 A kernel ridge regression classifier
10
11 :Keywords:
12 - `ridge` -- the ridge parameter [default: 1.0]
13 - `kernel` -- a kernel object [default: Linear]
14
15 """
16
17 attributes = {'ridge' : 1.0,
18 'kernel' : None}
19
20 - def __init__(self, arg = None, **args) :
23
25
26 rep = '<' + self.__class__.__name__ + ' instance>\n'
27 rep += 'ridge: %f\n' % self.ridge
28
29 return rep
30
31
32 - def train(self, data, **args) :
33
34 Classifier.train(self, data, **args)
35 self.data = data
36 if self.kernel is not None :
37 self.data.attachKernel(self.kernel)
38
39 Y = numpy.array(data.labels.Y)
40 Y = Y * 2 - 1
41
42 K = numpy.zeros((len(data), len(data)), numpy.float_)
43 print 'getting kernel matrix'
44 for i in range(len(data) - 1) :
45 for j in range(i, len(data)) :
46 K[i][j] = data.kernel.eval(data, i, j)
47 K[j][i] = K[i][j]
48 K = K + self.ridge * numpy.eye(len(data))
49 print 'about to call numpy.linalg.inv'
50 self.alpha = numpy.dot(Y, numpy.linalg.inv(K))
51
52 self.log.trainingTime = self.getTrainingTime()
53 print 'done training'
54
55 classify = Classifier.twoClassClassify
56
58
59 f = 0.0
60 for j in range(len(self.data)) :
61 f += self.alpha[j] * self.data.kernel.eval(data, i, j, self.data)
62
63 return f
64