source: orange/Orange/OrangeWidgets/Classify/OWEnsemble.py @ 11765:1546cd04481b

Revision 11765:1546cd04481b, 3.1 KB checked in by Ales Erjavec <ales.erjavec@…>, 5 months ago (diff)

Fixed widget layouts.

Line 
1"""
2<name>Ensemble</name>
3<description>Ensemble classification</description>
4<icon>icons/Ensemble.svg</icon>
5<contact>Ales Erjavec (ales.erjavec(@at@)fri.uni-lj.si)</contact>
6<priority>330</priority>
7<keywords>ensemble, bagging, boosting, adaboost</keywords>
8
9"""
10
11from OWWidget import *
12
13import OWGUI
14
15import orange
16import orngEnsemble
17
18import os, sys
19
20
21class OWEnsemble(OWWidget):
22    settingsList = ["method", "t"]
23   
24    METHODS = [("Boosting", orngEnsemble.BoostedLearner),
25               ("Bagging", orngEnsemble.BaggedLearner)]
26   
27    def __init__(self, parent=None, signalManager=None, name="Ensemble"):
28        OWWidget.__init__(self, parent, signalManager, name,
29                          wantMainArea=False, resizingEnabled=False)
30       
31        self.inputs = [("Learner", orange.Learner, self.setLearner), ("Data", ExampleTable, self.setData)]
32        self.outputs = [("Learner", orange.Learner), ("Classifier", orange.Classifier)]
33       
34        self.method = 0
35        self.t = 10
36       
37        self.loadSettings()
38       
39        box = OWGUI.radioButtonsInBox(self.controlArea, self, "method",
40                                      [name for name, _ in self.METHODS], 
41                                      box="Ensemble",
42                                      callback=self.onChange)
43       
44        i_box = OWGUI.indentedBox(box, sep=OWGUI.checkButtonOffsetHint(box.buttons[0]))
45       
46        OWGUI.spin(i_box, self, "t", min=1, max=100, step=1, label="Number of created classifiers:")
47        OWGUI.rubber(self.controlArea)
48        OWGUI.button(self.controlArea, self, "&Apply", callback=self.commit)
49       
50        self.data = None
51        self.learner = None
52       
53        self.resize(100, 100)
54       
55    def setLearner(self, learner=None):
56        self.learner = learner
57       
58    def setData(self, data):
59        if not self.isDataWithClass(data, checkMissing=True):
60             data = None
61        self.data = data
62       
63    def handleNewSignals(self):
64        self.checkMethod()
65        self.commit()
66       
67    def onChange(self):
68        self.checkMethod()
69   
70    def checkMethod(self):
71        self.warning(0)
72        if self.data is not None:
73            class_var = self.data.domain.class_var
74            if self.method == 0 and not \
75                    isinstance(class_var, orange.EnumVariable):
76                self.warning(0, "Cannot use 'Boosting' on non discrete class")
77                return False
78        return True
79   
80    def commit(self):
81        wrapped = None
82        classifier = None
83        if self.learner:
84            wrapped = self.METHODS[self.method][1](self.learner, t=self.t)
85        self.send("Learner", wrapped)
86           
87        if self.data and wrapped and self.checkMethod():
88            classifier = wrapped(self.data)
89        self.send("Classifier", classifier)
90           
91if __name__ == "__main__":
92    app = QApplication(sys.argv)
93    w = OWEnsemble()
94    w.setLearner(orange.BayesLearner())
95    w.setData(orange.ExampleTable("../../doc/datasets/iris"))
96    w.show()
97    app.exec_()
98           
99       
100       
101         
Note: See TracBrowser for help on using the repository browser.