Changeset 9468:ed8fb7d641b3 in orange


Ignore:
Timestamp:
07/29/11 11:26:04 (3 years ago)
Author:
wencanluo <wencanluo@…>
Branch:
default
Convert:
8610d30de9b0b7d647bada426a8d23e1238c23e5
Message:

Update evaluator to support multilabel for proportion_test and learning_curve method.
And fix a bug in learning_curve by adding load_data_flag to indicate whether the results are loaded successfully

Location:
orange
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • orange/Orange/evaluation/scoring.py

    r9454 r9468  
    444444 
    445445.. literalinclude:: code/mlc-evaluator.py 
    446    :lines: 1- 
     446   :lines: 1-15 
    447447 
    448448.. _multidata.tab: code/multidata.tab 
     
    26102610        aclass = e.actual_class 
    26112611        for i in range(len(e.classes)): 
    2612             labels = e.classes[i]  
     2612            labels = e.classes[i] 
     2613            #print labels,aclass 
    26132614            if len(labels) <> len(aclass): 
    26142615                raise ValueError, "The dimensions of the classified output and the actual class array do not match." 
  • orange/Orange/evaluation/testing.py

    r9466 r9468  
    4242 
    4343.. literalinclude:: code/mlc-evaluator.py 
    44     :lines: 1-7 
     44    :lines: 1-6 
    4545 
    4646After testing is done, classification accuracies can be computed and 
     
    277277    def add_result(self, aclass, aprob): 
    278278        """Appends a new result (class and probability prediction by a single classifier) to the classes and probabilities field.""" 
    279         if self.multilabel_flag and type(aclass.value)==float: 
    280             self.classes.append(float(aclass)) 
     279        if self.multilabel_flag == 0: 
     280            if type(aclass.value)==float: 
     281                self.classes.append(float(aclass)) 
     282                self.probabilities.append(aprob) 
     283            else: 
     284                self.classes.append(int(aclass)) 
     285                self.probabilities.append(list(aprob)) 
     286        else: 
     287            self.classes.append(aclass) 
    281288            self.probabilities.append(aprob) 
    282         else: 
    283             self.classes.append(int(aclass)) 
    284             self.probabilities.append(list(aprob)) 
    285         
     289             
    286290    def set_result(self, i, aclass, aprob): 
    287291        """Sets the result of the i-th classifier to the given values.""" 
     
    523527    examples, weight = demangleExamples(examples) 
    524528    classVar = examples.domain.classVar 
    525     if classVar.varType == Orange.data.Type.Discrete: 
    526         values = list(classVar.values) 
    527         baseValue = classVar.baseValue 
    528     else: 
    529         baseValue = values = None 
    530     test_results = ExperimentResults(times, [l.name for l in learners], values, weight!=0, baseValue) 
     529     
     530    multilabel_flag = label.is_multilabel(examples) 
     531    if multilabel_flag == 0: #single-label 
     532        if classVar.var_type == Orange.data.Type.Discrete: 
     533            values = list(classVar.values) 
     534            base_value = classVar.base_value 
     535        else: 
     536            base_value = values = None 
     537    else: #multi-label 
     538        values = label.get_label_names(examples) 
     539        base_value = None 
     540     
     541    #if classVar.varType == Orange.data.Type.Discrete: 
     542    #    values = list(classVar.values) 
     543    #    baseValue = classVar.baseValue 
     544    #else: 
     545    #    baseValue = values = None 
     546    test_results = ExperimentResults(times, [l.name for l in learners], values, weight!=0, base_value) 
    531547 
    532548    for time in range(times): 
     
    650666                cache = 0 
    651667 
    652         conv = examples.domain.classVar.varType == Orange.data.Type.Discrete and int or float 
    653         test_results = ExperimentResults(cv.folds, [l.name for l in learners], examples.domain.classVar.values.native(), weight!=0, examples.domain.classVar.baseValue) 
    654         test_results.results = [TestedExample(folds[i], conv(examples[i].getclass()), nLrn, examples[i].getweight(weight)) 
     668        multilabel_flag = label.is_multilabel(examples) 
     669        if multilabel_flag == 0: 
     670            conv = examples.domain.classVar.varType == Orange.data.Type.Discrete and int or float 
     671            test_results = ExperimentResults(cv.folds, [l.name for l in learners], examples.domain.classVar.values.native(), weight!=0, examples.domain.classVar.baseValue) 
     672            test_results.results = [TestedExample(folds[i], conv(examples[i].getclass()), nLrn, examples[i].getweight(weight)) 
    655673                               for i in range(len(examples))] 
    656  
     674        else: 
     675            test_results = ExperimentResults(cv.folds, [l.name for l in learners], label.get_label_names(examples), weight!=0, None) 
     676            test_results.results = [TestedExample(folds[i], label.get_labels(examples,examples[i]), nLrn, examples[i].getweight(weight),multilabel_flag) 
     677                           for i in range(len(examples))] 
     678         
     679        #if the selectref fails to have a set, it will fail to laod the result. If so, there will be no predicted class in the data 
     680        loaded_res_flag = False  
    657681        if cache and test_results.load_from_files(learners, fnstr): 
     682            loaded_res_flag = True 
    658683            printVerbose("  loaded from cache", verb) 
    659684        else: 
     
    667692                    continue 
    668693                 
     694                loaded_res_flag = True 
     695                 
    669696                for pp in pps: 
    670697                    learnset = pp[1](learnset) 
     
    680707                        # This is to prevent cheating: 
    681708                        ex = Orange.data.Instance(examples[i]) 
    682                         ex.setclass("?") 
     709                        if multilabel_flag == 0: 
     710                            ex.setclass("?") 
    683711                        for cl in range(nLrn): 
    684712                            if not cache or not test_results.loaded[cl]: 
     
    689717                test_results.save_to_files(learners, fnstr) 
    690718 
    691         allResults.append(test_results) 
    692          
     719        if loaded_res_flag: 
     720            allResults.append(test_results) 
     721     
    693722    return allResults 
    694723 
     
    786815        if examples.domain.class_var.var_type == Orange.data.Type.Discrete: 
    787816            values = list(examples.domain.class_var.values) 
    788             basevalue = examples.domain.class_var.base_value 
    789         else: 
    790             basevalue = values = None 
     817            base_value = examples.domain.class_var.base_value 
     818        else: 
     819            base_value = values = None 
    791820    else: #multi-label 
    792821        values = label.get_label_names(examples) 
    793         basevalue = None 
    794      
    795     test_results = ExperimentResults(nIterations, [getobjectname(l) for l in learners], values, weight!=0, basevalue) 
     822        base_value = None 
     823     
     824    test_results = ExperimentResults(nIterations, [getobjectname(l) for l in learners], values, weight!=0, base_value) 
    796825    if multilabel_flag == 0: 
    797826        conv = examples.domain.classVar.varType == Orange.data.Type.Discrete and int or float 
     
    10201049        test_results.examples = testset 
    10211050     
    1022     conv = testset.domain.classVar.varType == Orange.data.Type.Discrete and int or float 
     1051    multilabel_flag = label.is_multilabel(testset) 
     1052    if multilabel_flag == 0: 
     1053        conv = examples.domain.classVar.varType == Orange.data.Type.Discrete and int or float 
     1054       
    10231055    for ex in testset: 
    1024         te = TestedExample(iteration_number, conv(ex.getclass()), 0, 
     1056        if multilabel_flag == 0: 
     1057            te = TestedExample(iteration_number, conv(ex.getclass()), 0, 
    10251058                           ex.getweight(testweight)) 
    1026  
     1059        else: 
     1060            te = TestedExample(iteration_number, label.get_labels(testset,ex), 0, 
     1061                           ex.getweight(testweight),multilabel_flag) 
     1062         
    10271063        for classifier in classifiers: 
    10281064            # This is to prevent cheating: 
    10291065            ex2 = Orange.data.Instance(ex) 
    1030             ex2.setclass("?") 
     1066            if multilabel_flag == 0: 
     1067                ex2.setclass("?") 
    10311068            cr = classifier(ex2, Orange.core.GetBoth) 
    10321069            te.add_result(cr[0], cr[1]) 
  • orange/doc/Orange/rst/code/mlc-evaluator.py

    r9466 r9468  
    55 
    66res = Orange.evaluation.testing.cross_validation(learners, data) 
     7loss = Orange.evaluation.scoring.mlc_hamming_loss(res) 
     8accuracy = Orange.evaluation.scoring.mlc_accuracy(res) 
     9precision = Orange.evaluation.scoring.mlc_precision(res) 
     10recall = Orange.evaluation.scoring.mlc_recall(res) 
     11print 'loss=', loss 
     12print 'accuracy=', accuracy 
     13print 'precision=', precision 
     14print 'recall=', recall 
    715 
     16res = Orange.evaluation.testing.leave_one_out(learners, data) 
    817loss = Orange.evaluation.scoring.mlc_hamming_loss(res) 
     18accuracy = Orange.evaluation.scoring.mlc_accuracy(res) 
     19precision = Orange.evaluation.scoring.mlc_precision(res) 
     20recall = Orange.evaluation.scoring.mlc_recall(res) 
    921print 'loss=', loss 
     22print 'accuracy=', accuracy 
     23print 'precision=', precision 
     24print 'recall=', recall 
    1025 
     26res = Orange.evaluation.testing.proportion_test(learners, data, 0.5) 
     27loss = Orange.evaluation.scoring.mlc_hamming_loss(res) 
    1128accuracy = Orange.evaluation.scoring.mlc_accuracy(res) 
     29precision = Orange.evaluation.scoring.mlc_precision(res) 
     30recall = Orange.evaluation.scoring.mlc_recall(res) 
     31print 'loss=', loss 
    1232print 'accuracy=', accuracy 
     33print 'precision=', precision 
     34print 'recall=', recall 
    1335 
    14 precision = Orange.evaluation.scoring.mlc_precision(res) 
    15 print 'precision=', precision 
    16  
    17 recall = Orange.evaluation.scoring.mlc_recall(res) 
    18 print 'recall=', recall 
     36reses = Orange.evaluation.testing.learning_curve(learners, data) 
     37for res in reses: 
     38    loss = Orange.evaluation.scoring.mlc_hamming_loss(res) 
     39    accuracy = Orange.evaluation.scoring.mlc_accuracy(res) 
     40    precision = Orange.evaluation.scoring.mlc_precision(res) 
     41    recall = Orange.evaluation.scoring.mlc_recall(res) 
     42    print 'loss=', loss, 
     43    print 'accuracy=', accuracy, 
     44    print 'precision=', precision, 
     45    print 'recall=', recall, 
     46    print 
  • orange/doc/datasets/emotions.tab

    r9466 r9468  
    11Mean_Acc1298_Mean_Mem40_Centroid    Mean_Acc1298_Mean_Mem40_Rolloff Mean_Acc1298_Mean_Mem40_Flux    Mean_Acc1298_Mean_Mem40_MFCC_0  Mean_Acc1298_Mean_Mem40_MFCC_1  Mean_Acc1298_Mean_Mem40_MFCC_2  Mean_Acc1298_Mean_Mem40_MFCC_3  Mean_Acc1298_Mean_Mem40_MFCC_4  Mean_Acc1298_Mean_Mem40_MFCC_5  Mean_Acc1298_Mean_Mem40_MFCC_6  Mean_Acc1298_Mean_Mem40_MFCC_7  Mean_Acc1298_Mean_Mem40_MFCC_8  Mean_Acc1298_Mean_Mem40_MFCC_9  Mean_Acc1298_Mean_Mem40_MFCC_10 Mean_Acc1298_Mean_Mem40_MFCC_11 Mean_Acc1298_Mean_Mem40_MFCC_12 Mean_Acc1298_Std_Mem40_Centroid Mean_Acc1298_Std_Mem40_Rolloff  Mean_Acc1298_Std_Mem40_Flux Mean_Acc1298_Std_Mem40_MFCC_0   Mean_Acc1298_Std_Mem40_MFCC_1   Mean_Acc1298_Std_Mem40_MFCC_2   Mean_Acc1298_Std_Mem40_MFCC_3   Mean_Acc1298_Std_Mem40_MFCC_4   Mean_Acc1298_Std_Mem40_MFCC_5   Mean_Acc1298_Std_Mem40_MFCC_6   Mean_Acc1298_Std_Mem40_MFCC_7   Mean_Acc1298_Std_Mem40_MFCC_8   Mean_Acc1298_Std_Mem40_MFCC_9   Mean_Acc1298_Std_Mem40_MFCC_10  Mean_Acc1298_Std_Mem40_MFCC_11  Mean_Acc1298_Std_Mem40_MFCC_12  Std_Acc1298_Mean_Mem40_Centroid Std_Acc1298_Mean_Mem40_Rolloff  Std_Acc1298_Mean_Mem40_Flux Std_Acc1298_Mean_Mem40_MFCC_0   Std_Acc1298_Mean_Mem40_MFCC_1   Std_Acc1298_Mean_Mem40_MFCC_2   Std_Acc1298_Mean_Mem40_MFCC_3   Std_Acc1298_Mean_Mem40_MFCC_4   Std_Acc1298_Mean_Mem40_MFCC_5   Std_Acc1298_Mean_Mem40_MFCC_6   Std_Acc1298_Mean_Mem40_MFCC_7   Std_Acc1298_Mean_Mem40_MFCC_8   Std_Acc1298_Mean_Mem40_MFCC_9   Std_Acc1298_Mean_Mem40_MFCC_10  Std_Acc1298_Mean_Mem40_MFCC_11  Std_Acc1298_Mean_Mem40_MFCC_12  Std_Acc1298_Std_Mem40_Centroid  Std_Acc1298_Std_Mem40_Rolloff   Std_Acc1298_Std_Mem40_Flux  Std_Acc1298_Std_Mem40_MFCC_0    Std_Acc1298_Std_Mem40_MFCC_1    Std_Acc1298_Std_Mem40_MFCC_2    Std_Acc1298_Std_Mem40_MFCC_3    Std_Acc1298_Std_Mem40_MFCC_4    Std_Acc1298_Std_Mem40_MFCC_5    Std_Acc1298_Std_Mem40_MFCC_6    Std_Acc1298_Std_Mem40_MFCC_7    Std_Acc1298_Std_Mem40_MFCC_8    Std_Acc1298_Std_Mem40_MFCC_9    Std_Acc1298_Std_Mem40_MFCC_10   Std_Acc1298_Std_Mem40_MFCC_11   Std_Acc1298_Std_Mem40_MFCC_12   BH_LowPeakAmp   BH_LowPeakBPM   BH_HighPeakAmp  BH_HighPeakBPM  BH_HighLowRatio BHSUM1  BHSUM2  BHSUM3  amazed-suprised happy-pleased   relaxing-calm   quiet-still sad-lonely  angry-aggresive 
    22continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  continuous  0 1 0 1 0 1 0 1 0 1 0 1 
    3                                                                                                                                                                                                                                                                                                  label=1     label=1     label=1     label=1     label=1    class label=1 
     3                                                                                                                                                                                                                                                                                                 label=1     label=1     label=1     label=1     label=1    label=1 
    440.034741    0.089665    0.091225    -73.302422  6.215179    0.615074    2.037160    0.804065    1.301409    0.558576    0.672063    0.783788    0.766640    0.458712    0.530384    0.812429    0.028851    0.129039    0.039614    5.762173    1.636819    1.170034    1.051511    0.764163    0.642705    0.617868    0.510265    0.566213    0.509149    0.477275    0.505073    0.463535    0.013519    0.050591    0.009025    8.156257    1.077167    0.624711    0.810244    0.399568    0.279947    0.314215    0.231439    0.345401    0.285389    0.210613    0.321896    0.290551    0.022774    0.095801    0.015057    4.748694    0.536378    0.296306    0.273210    0.175800    0.105508    0.168246    0.115849    0.136020    0.110514    0.100517    0.118630    0.094923    0.051035    68  0.014937    136 2   0.245457    0.105065    0.405399    0   1   1   0   0   0 
    550.081374    0.272747    0.085733    -62.584438  3.183163    -0.218145   0.163038    0.620251    0.458514    0.041426    0.308287    0.538152    0.594871    0.734332    0.415489    0.761508    0.066288    0.262370    0.034438    3.480874    1.596532    0.943803    0.804444    0.511229    0.498670    0.523039    0.480916    0.488657    0.483166    0.445187    0.415994    0.405593    0.013621    0.073041    0.010094    1.243981    0.829790    0.252972    0.347831    0.205087    0.168601    0.178009    0.144080    0.178703    0.146937    0.125580    0.128202    0.107007    0.020028    0.066940    0.029483    3.963534    0.382360    0.168389    0.117525    0.098341    0.087046    0.057991    0.059393    0.059457    0.053439    0.067684    0.070075    0.041565    0.295031    70  0.276366    140 2   0.343547    0.276366    0.710924    1   0   0   0   0   1 
Note: See TracChangeset for help on using the changeset viewer.