source: orange/Orange/OrangeWidgets/Prototypes/OWBRkNN.py @ 9671:a7b056375472

Revision 9671:a7b056375472, 3.5 KB checked in by anze <anze.staric@…>, 2 years ago (diff)

Moved orange to Orange (part 2)

Line 
1"""
2<name>BR-kNN</name>
3<description>BR-kNN Multi-label Learner.</description>
4<icon>icons/Unknown.png</icon>
5<contact>Wencan Luo (wencanluo.cn(@at@)gmail.com)</contact>
6<priority>100</priority>
7"""
8from OWWidget import *
9import OWGUI
10from exceptions import Exception
11from orngWrap import PreprocessedLearner
12
13import Orange
14
15class OWBRkNN(OWWidget):
16    settingsList = ["name","k"]
17
18    def __init__(self, parent=None, signalManager = None, name='BR-kNN'):
19        OWWidget.__init__(self, parent, signalManager, name, wantMainArea = 0, resizingEnabled = 0)
20
21        self.callbackDeposit = []
22
23        self.inputs = [("Examples", ExampleTable, self.set_data), 
24                       ("Preprocess", PreprocessedLearner, self.set_preprocessor)
25                       ]
26        self.outputs = [("Learner", orange.Learner),("BR-kNN Classifier", Orange.multilabel.BRkNNClassifier)]
27
28        # Settings
29        self.name = 'BR-kNN'
30        self.k = 1
31       
32        self.loadSettings()
33
34        self.data = None                    # input data set
35        self.preprocessor = None            # no preprocessing as default
36        self.set_learner()                  # this just sets the learner, no data
37                                            # has come to the input yet
38
39        OWGUI.lineEdit(self.controlArea, self, 'name', box='Learner/Classifier Name', \
40                 tooltip='Name to be used by other widgets to identify your learner/classifier.')
41
42        OWGUI.separator(self.controlArea)
43
44        wbN = OWGUI.widgetBox(self.controlArea, "Neighbours")
45        OWGUI.spin(wbN, self, "k", 1, 100, 1, None, "Number of neighbours", orientation="horizontal")
46       
47        OWGUI.separator(self.controlArea)
48
49        OWGUI.button(self.controlArea, self, "&Apply", callback=self.set_learner, disabled=0, default=True)
50       
51        OWGUI.rubber(self.controlArea)
52
53        self.resize(100,250)
54
55    def send_report(self):
56        self.reportSettings("Learning parameters",
57                            [("base_learner", self.baselearnerList[self.base_learner][0])])
58        self.reportData(self.data)
59           
60    def set_data(self,data): 
61        if data == None:
62            return
63
64        if not Orange.multilabel.is_multilabel(data):
65            self.warning(0, "Multi-label data is expected on the input.")
66            return
67        self.warning(0, None)
68       
69        self.data = data
70        self.set_learner()
71
72    def set_preprocessor(self, pp):
73        self.preprocessor = pp
74        self.set_learner()
75         
76    def set_learner(self):
77        self.learner = Orange.multilabel.BRkNNLearner(k = self.k)
78        if self.preprocessor:
79            self.learner = self.preprocessor.wrapLearner(self.learner)
80        self.learner.name = self.name
81
82        self.send("Learner", self.learner)
83
84        self.learn()
85
86    def learn(self):
87        self.classifier = None
88        if self.data and self.learner:
89            try:
90                self.classifier = self.learner(self.data)
91                self.classifier.name = self.name
92            except Exception, (errValue):
93                self.classifier = None
94                self.error(str(errValue))
95        self.send("BR-kNN Classifier", self.classifier)
96
97##############################################################################
98# Test the widget.
99# Make sure that a sample data set (emotions.tab) is in the directory.
100
101if __name__=="__main__":
102    a=QApplication(sys.argv)
103    ow=OWBRkNN()
104
105    dataset = Orange.data.Table('emotions.tab')
106    ow.set_data(dataset)
107
108    ow.show()
109    a.exec_()
110    ow.saveSettings()
Note: See TracBrowser for help on using the repository browser.