source: orange/Orange/OrangeWidgets/Classify/OWEnsemble.py @ 11096:cf7d2ae9d22b

Revision 11096:cf7d2ae9d22b, 3.0 KB checked in by Ales Erjavec <ales.erjavec@…>, 19 months ago (diff)

Added new svg icons for the widgets/categories.

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, wantMainArea=False)
29       
30        self.inputs = [("Learner", orange.Learner, self.setLearner), ("Data", ExampleTable, self.setData)]
31        self.outputs = [("Learner", orange.Learner), ("Classifier", orange.Classifier)]
32       
33        self.method = 0
34        self.t = 10
35       
36        self.loadSettings()
37       
38        box = OWGUI.radioButtonsInBox(self.controlArea, self, "method",
39                                      [name for name, _ in self.METHODS], 
40                                      box="Ensemble",
41                                      callback=self.onChange)
42       
43        i_box = OWGUI.indentedBox(box, sep=OWGUI.checkButtonOffsetHint(box.buttons[0]))
44       
45        OWGUI.spin(i_box, self, "t", min=1, max=100, step=1, label="Number of created classifiers:")
46        OWGUI.rubber(self.controlArea)
47        OWGUI.button(self.controlArea, self, "&Apply", callback=self.commit)
48       
49        self.data = None
50        self.learner = None
51       
52        self.resize(100, 100)
53       
54    def setLearner(self, learner=None):
55        self.learner = learner
56       
57    def setData(self, data):
58        if not self.isDataWithClass(data, checkMissing=True):
59             data = None
60        self.data = data
61       
62    def handleNewSignals(self):
63        self.checkMethod()
64        self.commit()
65       
66    def onChange(self):
67        self.checkMethod()
68   
69    def checkMethod(self):
70        self.warning(0)
71        if self.data is not None:
72            class_var = self.data.domain.class_var
73            if self.method == 0 and not \
74                    isinstance(class_var, orange.EnumVariable):
75                self.warning(0, "Cannot use 'Boosting' on non discrete class")
76                return False
77        return True
78   
79    def commit(self):
80        wrapped = None
81        classifier = None
82        if self.learner:
83            wrapped = self.METHODS[self.method][1](self.learner, t=self.t)
84        self.send("Learner", wrapped)
85           
86        if self.data and wrapped and self.checkMethod():
87            classifier = wrapped(self.data)
88        self.send("Classifier", classifier)
89           
90if __name__ == "__main__":
91    app = QApplication(sys.argv)
92    w = OWEnsemble()
93    w.setLearner(orange.BayesLearner())
94    w.setData(orange.ExampleTable("../../doc/datasets/iris"))
95    w.show()
96    app.exec_()
97           
98       
99       
100         
Note: See TracBrowser for help on using the repository browser.