source: orange/Orange/OrangeWidgets/Regression/OWPLS.py @ 11765:1546cd04481b

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

Fixed widget layouts.

Line 
1"""
2<name>PLS Regression</name>
3<description>Partial Least Squares Regression</name>
4<icon>icons/PLSRegression.svg</icon>
5<priority>15</priority>
6<category>Regression</category>
7<keywords>linear, model, PCA</keywords>
8
9"""
10
11from OWWidget import *
12import OWGUI
13
14import Orange
15from Orange.regression import pls
16from Orange.tuning import PreprocessedLearner
17
18class OWPLS(OWWidget):
19    settingsList = ["name", "n_comp", "deflation_mode", "mode", "algorithm"]
20   
21    def __init__(self, parent=None, signalManager=None, title="PLS Regression"):
22        OWWidget.__init__(self, parent, signalManager, title,
23                          wantMainArea=False, resizingEnabled=False)
24       
25        self.inputs = [("Data", Orange.data.Table, self.set_data),
26                       ("Preprocessor", PreprocessedLearner, self.set_preprocessor)]
27       
28        self.outputs = [("Learner", Orange.core.Learner), 
29                        ("Predictor", Orange.core.Classifier)]
30       
31       
32        ##########
33        # Settings
34        ##########
35         
36        self.name = "PLS Regression"
37        self.n_comp = 2
38        self.deflation_mode = "Regression"
39        self.mode = "PLS"
40        self.algorithm = "svd"
41       
42        self.loadSettings()
43        #####
44        # GUI
45        #####
46       
47        box = OWGUI.widgetBox(self.controlArea, "Learner/Predictor Name", 
48                              addSpace=True)
49       
50        OWGUI.lineEdit(box, self, "name",
51                       tooltip="Name to use for the learner/predictor.")
52       
53        box = OWGUI.widgetBox(self.controlArea, "Settings", addSpace=True)
54       
55        OWGUI.spin(box, self, "n_comp", 2, 15, 1, 
56                   label="Number of components:", 
57                   tooltip="Number of components to keep.")
58       
59        OWGUI.comboBox(box, self, "deflation_mode", 
60                       label="Deflation mode", 
61                       items=["Regression", "Canonical"],
62#                       tooltip="",
63                       sendSelectedValue=True)
64       
65        OWGUI.comboBox(box, self, "mode", 
66                       label="Mode", 
67                       items=["PLS", "CCA"],
68#                       tooltip="",
69                       sendSelectedValue=True)
70       
71        OWGUI.rubber(self.controlArea)
72       
73        OWGUI.button(self.controlArea, self, "&Apply",
74                     callback=self.apply,
75                     tooltip="Send the learner on",
76                     autoDefault=True)
77       
78        self.data = None
79        self.preprocessor = None
80       
81        self.apply()
82   
83    def set_data(self, data=None):
84        self.data = data
85           
86    def set_preprocessor(self, pproc=None):
87        self.preprocessor = pproc
88       
89    def handleNewSignals(self):
90        self.apply()
91       
92    def apply(self):
93        learner = pls.PLSRegressionLearner(n_comp=self.n_comp,
94                        deflation_mode=self.deflation_mode.lower(),
95                        mode=self.mode,
96                        name=self.name
97                        )
98        predictor = None
99       
100        if self.preprocessor is not None:
101            learner = self.preprocessor.wrapLearner(learner)
102
103        self.error(0)
104        try:
105            if self.data is not None:
106                predictor = learner(self.data)
107                predictor.name = self.name
108        except Exception, ex:
109            self.error(0, "An error during learning: %r" % ex)
110           
111        self.send("Learner", learner)
112        self.send("Predictor", predictor)
113       
114if __name__ == "__main__":
115    app = QApplication(sys.argv)
116    w = OWPLS()
117    w.set_data(Orange.data.Table("housing"))
118    w.show()
119    app.exec_()
120#    w.saveSettings()
Note: See TracBrowser for help on using the repository browser.