1 '''
2
3 @author: Eleftherios Avramidis
4 '''
5
6 from Orange.classification.svm import SVMLearner, SVMClassifierWrapper
7 from Orange.optimization import TuneMParameters
8 from Orange.core import DomainContinuizer
9
10
12 '''
13 classdocs
14 '''
16 self.folds=4
17 self.verbose=True
18 SVMLearner.__init__(self, **kwds)
19 self.learner = SVMLearner(**kwds)
20 try:
21 self.multinomialTreatment = eval(kwds["multinomialTreatment"])
22 except:
23 self.multinomialTreatment = DomainContinuizer.NValues
24 try:
25 self.continuousTreatment = eval(kwds["continuousTreatment"])
26 except:
27 self.continuousTreatment = DomainContinuizer.NormalizeBySpan
28 try:
29 self.classTreatment = eval(kwds["classTreatment"])
30 except:
31 self.classTreatment = DomainContinuizer.Ignore
32
34 print "continuizing data"
35 newdomain, newexamples = self.continuize(examples)
36 newexamples.save("continuized_examples.tab")
37 self.verbose = True
38 print "tuning classifier"
39 classifier, fittedParameters = self.tuneClassifier(newexamples, newdomain, examples)
40
41 paramfile = open("svm.params", 'w')
42 print fittedParameters
43 for param in fittedParameters:
44 paramfile.write(str(param))
45 paramfile.write("\n")
46
47 paramfile.close()
48 return classifier
49
51 transformer=DomainContinuizer()
52
53
54 transformer.multinomialTreatment = self.multinomialTreatment
55 transformer.continuousTreatment = self.continuousTreatment
56 transformer.classTreatment = self.classTreatment
57
58 newdomain = transformer(examples)
59 newexamples = examples.translate(newdomain)
60 return newdomain, newexamples
61
62
64 params={}
65 parameters = []
66 self.learner.normalization = False
67
68 if self.svm_type in [1,4]:
69 numOfNuValues=9
70 if self.svm_type == SVMLearner.Nu_SVC:
71 maxNu = max(self.maxNu(newexamples) - 1e-7, 0.0)
72 else:
73 maxNu = 1.0
74 parameters.append(("nu", [i/10.0 for i in range(1, 9) if i/10.0 < maxNu] + [maxNu]))
75 else:
76 parameters.append(("C", [2**a for a in range(-5,15,2)]))
77 if self.kernel_type==2:
78 parameters.append(("gamma", [2**a for a in range(-5,5,2)]+[0]))
79 tunedLearner = TuneMParameters(object=self.learner, parameters=parameters, folds=self.folds)
80 print "apply learner"
81 import orngWrap
82 tunedLearner = orngWrap.TuneMParameters(object=self.learner,
83 parameters=parameters,
84 folds=self.folds)
85
86
87 return SVMClassifierWrapper(tunedLearner(newexamples,
88 verbose=self.verbose))
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109