Changeset 11628:0453b7a5b43b in orange


Ignore:
Timestamp:
04/20/12 16:02:22 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added back single tree output using the simple tree converter.

Location:
Orange/OrangeWidgets
Files:
2 edited

Legend:

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

    r11627 r11628  
    2828 
    2929        self.outputs = [("Learner", orange.Learner), 
    30                         ("Random Forest Classifier", orange.Classifier)] 
     30                        ("Random Forest Classifier", orange.Classifier), 
     31                        ("Selected Tree", Orange.classification.tree.TreeClassifier)] 
    3132 
    3233        self.name = 'Random Forest' 
     
    3940        self.limitDepthP = 3 
    4041        self.rseed = 0 
     42        self.outtree = 0 
    4143 
    4244        self.maxTrees = 10000 
     
    8385 
    8486        OWGUI.separator(self.controlArea) 
     87 
     88        self.streesBox = OWGUI.spin(self.controlArea, self, "outtree", -1, 
     89                                    self.maxTrees, 
     90                                    orientation="horizontal", 
     91                                    label="Index of tree on the output", 
     92                                    callback=[self.period, self.extree]) 
     93        self.streeEnabled(False) 
    8594 
    8695        OWGUI.separator(self.controlArea) 
     
    155164 
    156165        #self.setLearner() 
    157  
     166        self.streeEnabled(False) 
    158167        if self.data: 
    159168            learner = self.constructLearner() 
     
    162171            try: 
    163172                self.classifier = learner(self.data) 
     173                self.streeEnabled(True) 
    164174                self.classifier.name = self.name 
    165175            except Exception, (errValue): 
     
    180190        self.setData(self.data) 
    181191 
     192    def period(self): 
     193        if self.outtree == -1: 
     194            self.outtree = self.claTrees - 1 
     195        elif self.outtree >= self.claTrees: 
     196            self.outtree = 0 
     197 
     198    def extree(self): 
     199        stc = self.classifier.classifiers[self.outtree] 
     200        if self.preprocessor: 
     201            # TODO: get the transformed data at learning step from the 
     202            # wrapped learner (or at least cache it here) 
     203            train_data = self.data.translate(self.classifier.domain) 
     204        else: 
     205            train_data = self.data 
     206 
     207        # Replay the bootstrap sampling as done by RandomForestLearner 
     208        rand = random.Random(self.claSeed) 
     209        n = len(train_data) 
     210        selection = [rand.randrange(n) 
     211                     for _ in range((self.outtree + 1) * n)] 
     212        # need the last n samples 
     213        selection = selection[-n:] 
     214        train_data = train_data.get_items_ref(selection) 
     215 
     216        tree = Orange.classification.tree._simple_tree_convert( 
     217            stc, self.classifier.domain, train_data) 
     218 
     219        self.send("Selected Tree", tree) 
     220 
     221    def streeEnabled(self, status): 
     222        if status: 
     223            self.claTrees = self.trees 
     224            self.claSeed = self.rseed 
     225            self.streesBox.setDisabled(False) 
     226            self.period() 
     227            self.extree() 
     228        else: 
     229            self.streesBox.setDisabled(True) 
     230 
    182231 
    183232if __name__ == "__main__": 
  • Orange/OrangeWidgets/Regression/OWRandomForestRegression.py

    r11627 r11628  
    55<contact>Marko Toplak (marko.toplak(@at@)gmail.com)</contact> 
    66<priority>320</priority> 
    7 <keywords>bagging, ensemble</keywords> 
     7<tags>bagging,ensemble</tags> 
    88 
    99""" 
     
    2020 
    2121        self.outputs = [("Learner", orange.Learner), 
    22                         ("Random Forest Classifier", orange.Classifier)] 
     22                        ("Random Forest Classifier", orange.Classifier), 
     23                        ("Selected Tree", Orange.classification.tree.TreeClassifier)] 
    2324 
    2425    def setData(self, data): 
    25         self.data = self.isDataWithClass(data, orange.VarTypes.Continuous, checkMissing=True) and data or None 
    26          
     26        if not self.isDataWithClass(data, orange.VarTypes.Continuous, 
     27                                    checkMissing=True): 
     28            data = None 
     29        self.data = data 
     30 
     31        self.streeEnabled(False) 
    2732        if self.data: 
    2833            learner = self.constructLearner() 
     
    3237                self.classifier = learner(self.data) 
    3338                self.classifier.name = self.name 
     39                self.streeEnabled(True) 
    3440            except Exception, (errValue): 
    3541                self.error(str(errValue)) 
Note: See TracChangeset for help on using the changeset viewer.