Ignore:
Timestamp:
07/15/13 11:16:51 (9 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Code style fixes for Random forest widgets.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Classify/OWRandomForest.py

    r11096 r11627  
    1313from orngWrap import PreprocessedLearner 
    1414 
     15 
    1516class OWRandomForest(OWWidget): 
    16     settingsList = ["name", "trees", "attributes", "attributesP", "preNodeInst", "preNodeInstP", "limitDepth", "limitDepthP", "rseed"] 
     17    settingsList = ["name", "trees", "attributes", "attributesP", 
     18                    "preNodeInst", "preNodeInstP", "limitDepth", 
     19                    "limitDepthP", "rseed"] 
    1720 
    18     def __init__(self, parent=None, signalManager = None, name='Random Forest'): 
    19         OWWidget.__init__(self, parent, signalManager, name, wantMainArea=False, resizingEnabled=False) 
     21    def __init__(self, parent=None, signalManager=None, name='Random Forest'): 
     22        OWWidget.__init__(self, parent, signalManager, name, 
     23                          wantMainArea=False, resizingEnabled=False) 
    2024 
    2125        self.inputs = [("Data", ExampleTable, self.setData), 
    22                        ("Preprocess", PreprocessedLearner, self.setPreprocessor)] 
    23          
     26                       ("Preprocess", PreprocessedLearner, 
     27                        self.setPreprocessor)] 
     28 
    2429        self.outputs = [("Learner", orange.Learner), 
    2530                        ("Random Forest Classifier", orange.Classifier)] 
     
    4247        self.preprocessor = None 
    4348 
    44         OWGUI.lineEdit(self.controlArea, self, 'name', box='Learner/Classifier Name', tooltip='Name to be used by other widgets to identify your learner/classifier.') 
     49        OWGUI.lineEdit(self.controlArea, self, 'name', 
     50                       box='Learner/Classifier Name', 
     51                       tooltip='Name to be used by other widgets to identify ' 
     52                               'your learner/classifier.') 
    4553 
    4654        OWGUI.separator(self.controlArea) 
     
    4856        self.bBox = OWGUI.widgetBox(self.controlArea, 'Basic Properties') 
    4957 
    50         self.treesBox = OWGUI.spin(self.bBox, self, "trees", 1, self.maxTrees, orientation="horizontal", label="Number of trees in forest") 
    51         self.attributesBox, self.attributesPBox = OWGUI.checkWithSpin(self.bBox, self, "Consider exactly", 1, 10000, "attributes", "attributesP", " "+"random attributes at each split.") 
    52         self.rseedBox = OWGUI.spin(self.bBox, self, "rseed", 0, 100000, orientation="horizontal", label="Seed for random generator ") 
     58        self.treesBox = OWGUI.spin(self.bBox, self, "trees", 1, self.maxTrees, 
     59                                   orientation="horizontal", 
     60                                   label="Number of trees in forest") 
     61        self.attributesBox, self.attributesPBox = \ 
     62            OWGUI.checkWithSpin(self.bBox, self, "Consider exactly", 
     63                                1, 10000, "attributes", "attributesP", 
     64                                " random attributes at each split.") 
     65 
     66        self.rseedBox = OWGUI.spin(self.bBox, self, "rseed", 0, 100000, 
     67                                   orientation="horizontal", 
     68                                   label="Seed for random generator ") 
    5369 
    5470        OWGUI.separator(self.controlArea) 
     
    5672        self.pBox = OWGUI.widgetBox(self.controlArea, 'Growth Control') 
    5773 
    58         self.limitDepthBox, self.limitDepthPBox = OWGUI.checkWithSpin(self.pBox, self, "Maximal depth of individual trees", 1, 1000, "limitDepth", "limitDepthP", "") 
    59         self.preNodeInstBox, self.preNodeInstPBox = OWGUI.checkWithSpin(self.pBox, self, "Stop splitting nodes with ", 1, 1000, "preNodeInst", "preNodeInstP", " or fewer instances") 
     74        self.limitDepthBox, self.limitDepthPBox = \ 
     75            OWGUI.checkWithSpin(self.pBox, self, 
     76                                "Maximal depth of individual trees", 
     77                                1, 1000, "limitDepth", "limitDepthP", "") 
     78 
     79        self.preNodeInstBox, self.preNodeInstPBox = \ 
     80            OWGUI.checkWithSpin(self.pBox, self, "Stop splitting nodes with ", 
     81                                1, 1000, "preNodeInst", "preNodeInstP", 
     82                                " or fewer instances") 
    6083 
    6184        OWGUI.separator(self.controlArea) 
     
    6386        OWGUI.separator(self.controlArea) 
    6487 
    65         self.btnApply = OWGUI.button(self.controlArea, self, "&Apply Changes", callback = self.doBoth, disabled=0, default=True) 
     88        self.btnApply = OWGUI.button(self.controlArea, self, 
     89                                     "&Apply Changes", 
     90                                     callback=self.doBoth, 
     91                                     disabled=0, 
     92                                     default=True) 
    6693 
    67         self.resize(100,200) 
     94        self.resize(100, 200) 
    6895 
    6996        self.setLearner() 
     
    7198    def sendReport(self): 
    7299        self.reportSettings("Learning parameters", 
    73                             [("Number of trees", self.trees), 
    74                              ("Considered number of attributes at each split", self.attributeP if self.attributes else "not set"), 
    75                              ("Seed for random generator", self.rseed), 
    76                              ("Maximal depth of individual trees", self.limitDepthP if self.limitDepth else "not set"), 
    77                              ("Minimal number of instances in a leaf", self.preNodeInstP if self.preNodeInst else "not limited") 
    78                            ]) 
     100                    [("Number of trees", self.trees), 
     101                     ("Considered number of attributes at each split", 
     102                      self.attributeP if self.attributes else "not set"), 
     103                     ("Seed for random generator", self.rseed), 
     104                     ("Maximal depth of individual trees", 
     105                      self.limitDepthP if self.limitDepth else "not set"), 
     106                     ("Minimal number of instances in a leaf", 
     107                      self.preNodeInstP if self.preNodeInst else "not limited") 
     108                   ]) 
    79109        self.reportData(self.data) 
    80110 
     
    87117 
    88118        from Orange.classification.tree import SimpleTreeLearner 
    89          
     119 
    90120        smallLearner = SimpleTreeLearner() 
    91121 
    92122        if self.preNodeInst: 
    93             smallLearner.min_instances = self.preNodeInstP  
     123            smallLearner.min_instances = self.preNodeInstP 
    94124        else: 
    95125            smallLearner.min_instances = 0 
    96126 
    97127        if self.limitDepth: 
    98             smallLearner.max_depth = self.limitDepthP  
    99          
    100         learner = orngEnsemble.RandomForestLearner(base_learner=smallLearner,  
     128            smallLearner.max_depth = self.limitDepthP 
     129 
     130        learner = orngEnsemble.RandomForestLearner(base_learner=smallLearner, 
    101131                            trees=self.trees, rand=rand, attributes=attrs) 
    102132 
     
    119149 
    120150    def setData(self, data): 
    121         self.data = self.isDataWithClass(data, orange.VarTypes.Discrete, checkMissing=True) and data or None 
    122          
     151        if not self.isDataWithClass(data, orange.VarTypes.Discrete, 
     152                                    checkMissing=True): 
     153            data = None 
     154        self.data = data 
     155 
    123156        #self.setLearner() 
    124157 
    125158        if self.data: 
    126159            learner = self.constructLearner() 
    127             pb = OWGUI.ProgressBar(self, iterations=self.trees) 
    128160            self.progressBarInit() 
    129161            learner.callback = lambda v: self.progressBarSet(100.0 * v) 
     
    139171 
    140172        self.send("Random Forest Classifier", self.classifier) 
    141          
     173 
    142174    def setPreprocessor(self, pp): 
    143175        self.preprocessor = pp 
     
    149181 
    150182 
    151  
    152 ############################################################################## 
    153 # Test the widget, run from DOS prompt 
    154 # > python OWDataTable.py) 
    155 # Make sure that a sample data set (adult_sample.tab) is in the directory 
    156  
    157 if __name__=="__main__": 
    158     a=QApplication(sys.argv) 
    159     ow=OWRandomForest() 
    160     a.setMainWidget(ow) 
     183if __name__ == "__main__": 
     184    a = QApplication(sys.argv) 
     185    ow = OWRandomForest() 
    161186 
    162187    d = orange.ExampleTable('adult_sample') 
     
    164189 
    165190    ow.show() 
    166     a.exec_loop() 
     191    a.exec_() 
    167192    ow.saveSettings() 
Note: See TracChangeset for help on using the changeset viewer.