Changeset 11629:80bbc6bff5c1 in orange


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

Fixed Classification Tree Graph widget so it does not require stored instances.

File:
1 edited

Legend:

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

    r11216 r11629  
    253253 
    254254        OWGUI.rubber(self.NodeTab) 
    255          
    256255 
    257256    def sendReport(self): 
    258257        if self.tree: 
    259             tclass = self.tree.examples.domain.classVar.values[self.TargetClassIndex] 
     258            tclass = str(self.targetCombo.currentText()) 
    260259            tsize = "%i nodes, %i leaves" % (orngTree.countNodes(self.tree), orngTree.countLeaves(self.tree)) 
    261260        else: 
     
    336335        self.scene.update() 
    337336        self.sceneView.repaint() 
    338          
     337 
    339338    def toggleNodeColor(self): 
     339        palette = self.scene.colorPalette 
    340340        for node in self.scene.nodes(): 
    341             if self.NodeColorMethod == 0:   # default 
     341            dist = node.tree.distribution 
     342            if self.NodeColorMethod == 0: 
     343                # default color 
    342344                color = BodyColor_Default 
    343             elif self.NodeColorMethod == 1: # instances in node 
    344                 div = self.tree.distribution.cases 
    345                 if div > 1e-6: 
    346                     light = 400 - 300*node.tree.distribution.cases/div 
    347                 else: 
    348                     light = 100 
     345            elif self.NodeColorMethod == 1: 
     346                # number of instances in node 
     347                all_cases = self.tree.distribution.cases 
     348                light = 200 - 100 * dist.cases / (all_cases or 1) 
    349349                color = BodyCasesColor_Default.light(light) 
    350             elif self.NodeColorMethod == 2: # majority class probability 
    351                 light=400- 300*float(node.majorityCount) / node.tree.distribution.abs 
    352                 color = self.scene.colorPalette[node.tree.examples.domain.classVar.values.index(node.majorityClass)].light(light) 
    353             elif self.NodeColorMethod == 3: # target class probability 
    354                 div = node.tree.distribution.cases 
    355                 if div > 1e-6: 
    356                     light=400-300*node.tree.distribution[self.TargetClassIndex]/div 
    357                 else: 
    358                     light = 100 
    359                 color = self.scene.colorPalette[self.TargetClassIndex].light(light) 
    360             elif self.NodeColorMethod == 4: # target class distribution 
    361                 div = self.tree.distribution[self.TargetClassIndex] 
    362                 if div > 1e-6: 
    363                     light=200 - 100*node.tree.distribution[self.TargetClassIndex]/div 
    364                 else: 
    365                     light = 100 
    366                 color = self.scene.colorPalette[self.TargetClassIndex].light(light) 
    367 #            gradient = QLinearGradient(0, 0, 0, 100) 
    368 #                gradient.setStops([(0, QColor(Qt.gray).lighter(120)), (1, QColor(Qt.lightGray).lighter())]) 
    369 #            gradient.setStops([(0, color), (1, color.lighter())]) 
    370 #            node.backgroundBrush = QBrush(gradient) 
     350            elif self.NodeColorMethod == 2: 
     351                # majority class probability 
     352                modus = dist.modus() 
     353                p = dist[modus] / (dist.abs or 1) 
     354                light = 400 - 300 * p 
     355                color = palette[int(modus)].light(light) 
     356            elif self.NodeColorMethod == 3: 
     357                # target class probability 
     358                p = dist[self.TargetClassIndex] / (dist.cases or 1) 
     359                light = 200 - 100 * p 
     360                color = palette[self.TargetClassIndex].light(light) 
     361            elif self.NodeColorMethod == 4: 
     362                # target class distribution 
     363                all_target = self.tree.distribution[self.TargetClassIndex] or 1 
     364                light = 200 - 100 * dist[self.TargetClassIndex] / all_target 
     365                color = palette[self.TargetClassIndex].light(light) 
    371366            node.backgroundBrush = QBrush(color) 
    372367        self.scene.update() 
     
    384379        self.scene.update() 
    385380 
    386     def ctree(self, tree=None): 
     381    def ctree(self, classifier=None): 
     382        """ 
     383        Set the input TreeClassifier. 
     384        """ 
    387385        self.send("Data", None) 
    388386        self.closeContext() 
    389387        self.targetCombo.clear() 
    390         if tree: 
    391             for name in tree.tree.examples.domain.classVar.values: 
     388        self.classifier = classifier 
     389        if classifier: 
     390            for name in classifier.domain.classVar.values: 
    392391                self.targetCombo.addItem(name) 
    393             self.TargetClassIndex=0 
    394             self.openContext("", tree.domain) 
     392            self.TargetClassIndex = 0 
     393            self.openContext("", classifier.domain) 
    395394        else: 
    396395            self.openContext("", None) 
    397         OWTreeViewer2D.ctree(self, tree) 
     396        OWTreeViewer2D.ctree(self, classifier) 
    398397        self.togglePies() 
    399398 
Note: See TracChangeset for help on using the changeset viewer.