Changeset 9448:d3150d5fa7ff in orange


Ignore:
Timestamp:
07/04/11 16:00:56 (3 years ago)
Author:
wencanluo <wencanluo@…>
Branch:
default
Convert:
1835405fa86ba1135bf7763c85cf33c95e4064c2
Message:

Initial framework for widgets for multi-label

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Multilabel/OWTestLearners.py

    r9447 r9448  
    1616warnings.filterwarnings("ignore", "'id' is not a builtin attribute", 
    1717                        orange.AttributeWarning) 
     18import Orange.multilabel.label as label 
     19import Orange 
    1820 
    1921############################################################################## 
     
    5456        ('Recall', 'Recall', 'recall(cm)', False, True), 
    5557        ('Brier score', 'Brier', 'BrierScore(res)', True), 
    56         ('Matthews correlation coefficient', 'MCC', 'MCC(cm)', False, True)]] 
     58        ('Hamming Loss', 'HammingLoss', 'hamming_loss(res)', True), 
     59        ('Matthews correlation coefficient', 'MCC', 'MCC(cm)', False, True), 
     60        ]] 
    5761 
    5862    rStatistics = [Score(*s) for s in [\ 
     
    271275                self.learners[id].results = None 
    272276            return 
     277        print self.data.domain 
    273278        # test which learners can accept the given data set 
    274279        # e.g., regressions can't deal with classification data 
     
    276281        n = len(self.data.domain.attributes)*2 
    277282        indices = orange.MakeRandomIndices2(p0=min(n, len(self.data)), stratified=orange.MakeRandomIndices2.StratifiedIfPossible) 
    278         new = self.data.selectref(indices(self.data)) 
     283        print indices 
     284   
     285        new = self.data 
     286#        new = self.data.selectref(indices(self.data)) 
    279287#        new = self.data.selectref([1]*min(n, len(self.data)) + 
    280288#                                  [0]*(len(self.data) - min(n, len(self.data)))) 
     289         
     290        for e in new: 
     291            print e 
     292         
     293        multilabel_flag = label.is_multilabel(self.data) 
     294  
    281295        self.warning(0) 
    282296        for l in [self.learners[id] for id in ids]: 
     
    286300            try: 
    287301                predictor = learner(new) 
    288                 if predictor(new[0]).varType == new.domain.classVar.varType: 
     302                if multilabel_flag == 0: #single label 
     303                    if predictor(new[0]).varType == new.domain.classVar.varType: 
     304                        learners.append(learner) 
     305                    else: 
     306                        l.scores = [] 
     307                else:                   #multi-label 
    289308                    learners.append(learner) 
    290                 else: 
    291                     l.scores = [] 
    292309            except Exception, ex: 
    293310                self.warning(0, "Learner %s ends with exception: %s" % (l.name, str(ex))) 
     
    357374 
    358375    def recomputeCM(self): 
     376        print "recomputeCM" 
    359377        if not self.results: 
    360378            return 
     
    372390    def setData(self, data): 
    373391        """handle input train data set""" 
     392        if not data: 
     393            return 
    374394        self.closeContext() 
    375         self.data = self.isDataWithClass(data, checkMissing=True) and data or None 
     395         
     396        multilabel_flag = label.is_multilabel(data) 
     397        if multilabel_flag == 0:  
     398            self.data = self.isDataWithClass(data, checkMissing=True) and data or None 
     399        else: 
     400            self.data = data 
     401         
    376402        self.fillClassCombo() 
     403     
    377404        if not self.data: 
    378405            # data was removed, remove the scores 
     
    383410        else: 
    384411            # new data has arrived 
    385             self.data = orange.Filter_hasClassValue(self.data) 
     412            if multilabel_flag == 0: #single label 
     413                self.data = orange.Filter_hasClassValue(self.data) 
     414 
    386415            self.statLayout.setCurrentWidget(self.cbox if self.isclassification() else self.rbox) 
    387416#            if self.isclassification(): 
     
    398427        self.openContext("", data) 
    399428        self.paintscores() 
    400  
     429         
    401430    def setTestData(self, data): 
    402431        """handle test data set""" 
     
    436465    def setLearner(self, learner, id=None): 
    437466        """add/remove a learner""" 
     467        print "setLearner" 
    438468        if learner: # a new or updated learner 
    439469            if id in self.learners: # updated learner 
     
    450480            if id in self.learners: 
    451481                res = self.learners[id].results 
    452                 if res and res.numberOfLearners > 1: 
     482                if res and res.number_of_learners > 1: 
    453483                    indx = [l.id for l in res.learners].index(id) 
    454484                    res.remove(indx) 
     
    481511        # and remove this set from the list of result sets 
    482512        rlist = dict([(l.results,1) for l in self.learners.values() if l.scores]).keys() 
    483         rlen = [r.numberOfLearners for r in rlist] 
     513        rlen = [r.number_of_learners for r in rlist] 
    484514        results = rlist.pop(rlen.index(max(rlen))) 
    485515         
     
    548578    a.exec_() 
    549579 
    550     data1 = orange.ExampleTable(r'../../doc/datasets/voting') 
    551     data2 = orange.ExampleTable(r'../../golf') 
    552     datar = orange.ExampleTable(r'../../auto-mpg') 
    553     data3 = orange.ExampleTable(r'../../sailing-big') 
    554     data4 = orange.ExampleTable(r'../../sailing-test') 
    555  
    556     l1 = orange.MajorityLearner(); l1.name = '1 - Majority' 
     580    data1 = orange.ExampleTable(r'../../doc/datasets/multidata') 
     581    data2 = orange.ExampleTable(r'../../doc/datasets/glass') 
     582    datar = orange.ExampleTable(r'../../doc/datasets/adult') 
     583    data3 = orange.ExampleTable(r'../../doc/datasets/balance-scale') 
     584    data4 = orange.ExampleTable(r'../../doc/datasets/bridges') 
     585 
     586    l1 = Orange.multilabel.BinaryRelevanceLearner(); l1.name = '1 - BR' 
    557587 
    558588    l2 = orange.BayesLearner() 
     
    570600    r5 = r.LinearRegressionLearner(name="0 - lin reg") 
    571601 
    572     testcase = 4 
     602    testcase = 3 
    573603 
    574604    if testcase == 0: # 1(UPD), 3, 4 
     
    597627        ow.setLearner(None, 1) 
    598628    if testcase == 3: # regression first 
    599         ow.setData(datar) 
    600         ow.setLearner(r5, 5) 
     629        ow.setData(data1) 
     630        ow.setLearner(l1, 1) 
    601631    if testcase == 4: # separate train and test data 
    602632        ow.setData(data3) 
    603         ow.setTestData(data4) 
    604         ow.setLearner(l2, 5) 
     633        ow.setTestData(data1) 
     634        ow.setLearner(l2,1) 
    605635        ow.setTestData(None) 
    606636 
Note: See TracChangeset for help on using the changeset viewer.