Changeset 9134:ab6359362808 in orange


Ignore:
Timestamp:
10/21/11 12:29:09 (2 years ago)
Author:
anze <anze.staric@…>
Branch:
default
Convert:
368e4dc1d0dc00211db86949a54e8f2c9ecbfde8
Message:

Refactored test_with_indices

File:
1 edited

Legend:

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

    r8762 r9134  
    704704    return allResults 
    705705 
    706     
     706def preprocess_data(learnset, testset, preprocessors): 
     707    """Apply preprocessors on learn and test dataset""" 
     708    for p_type, preprocessor in preprocessors: 
     709        if p_type == "B": 
     710            learnset = preprocessor(learnset) 
     711            testset = preprocessor(testset) 
     712    for p_type, preprocessor in preprocessors: 
     713        if p_type == "L": 
     714            learnset = preprocessor(learnset) 
     715        elif p_type == "T": 
     716            testset = preprocessor(testset) 
     717        elif p_type == "LT": 
     718            (learnset, testset) = preprocessor(learnset, testset) 
     719 
     720    return learnset, testset 
     721 
     722 
     723def one_fold_with_indices(learners, examples, fold, indices, test_results, preprocessors, weight, cache, callback, 
     724                          store_classifiers): 
     725    """Perform one fold of cross-validation like procedure using provided indices.""" 
     726     
     727    # learning 
     728    learnset = examples.selectref(indices, fold, negate=1) 
     729    if not len(learnset): 
     730        return 
     731    testset = examples.selectref(indices, fold, negate=0) 
     732    if not len(testset): 
     733        return 
     734 
     735    learnset, testset = preprocess_data(learnset, testset, preprocessors) 
     736    if not learnset: 
     737        raise SystemError, "no training examples after preprocessing" 
     738    if not testset: 
     739        raise SystemError, "no test examples after preprocessing" 
     740 
     741    nlearners = len(learners) 
     742    classifiers = [None] * nlearners 
     743    for i in range(nlearners): 
     744        if not cache or not test_results.loaded[i]: 
     745            classifiers[i] = learners[i](learnset, weight) 
     746    if store_classifiers: 
     747        test_results.classifiers.append(classifiers) 
     748 
     749    # testing 
     750    tcn = 0 
     751    for i in range(len(examples)): 
     752        if indices[i] == fold: 
     753            # This is to prevent cheating: 
     754            ex = Orange.data.Instance(testset[tcn]) 
     755            ex.setclass("?") 
     756            tcn += 1 
     757            for cl in range(nlearners): 
     758                if not cache or not test_results.loaded[cl]: 
     759                    cr = classifiers[cl](ex, Orange.core.GetBoth) 
     760                    if cr[0].is_special(): 
     761                        raise "Classifier %s returned unknown value" % (classifiers[cl].name or ("#%i" % cl)) 
     762                    test_results.results[i].set_result(cl, cr[0], cr[1]) 
     763    if callback: 
     764        callback() 
     765 
     766 
    707767def test_with_indices(learners, examples, indices, indicesrandseed="*", pps=[], callback=None, **argkw): 
    708768    """ 
     
    765825    else: 
    766826        for fold in range(nIterations): 
    767             # learning 
    768             learnset = examples.selectref(indices, fold, negate=1) 
    769             if not len(learnset): 
    770                 continue 
    771             testset = examples.selectref(indices, fold, negate=0) 
    772             if not len(testset): 
    773                 continue 
    774              
    775             for pp in pps: 
    776                 if pp[0]=="B": 
    777                     learnset = pp[1](learnset) 
    778                     testset = pp[1](testset) 
    779  
    780             for pp in pps: 
    781                 if pp[0]=="L": 
    782                     learnset = pp[1](learnset) 
    783                 elif pp[0]=="T": 
    784                     testset = pp[1](testset) 
    785                 elif pp[0]=="LT": 
    786                     (learnset, testset) = pp[1](learnset, testset) 
    787  
    788             if not learnset: 
    789                 raise SystemError, "no training examples after preprocessing" 
    790  
    791             if not testset: 
    792                 raise SystemError, "no test examples after preprocessing" 
    793  
    794             classifiers = [None]*nLrn 
    795             for i in range(nLrn): 
    796                 if not cache or not testResults.loaded[i]: 
    797                     classifiers[i] = learners[i](learnset, weight) 
    798             if storeclassifiers:     
    799                 testResults.classifiers.append(classifiers) 
    800  
    801             # testing 
    802             tcn = 0 
    803             for i in range(len(examples)): 
    804                 if (indices[i]==fold): 
    805                     # This is to prevent cheating: 
    806                     ex = Orange.data.Instance(testset[tcn]) 
    807                     ex.setclass("?") 
    808                     tcn += 1 
    809                     for cl in range(nLrn): 
    810                         if not cache or not testResults.loaded[cl]: 
    811                             cr = classifiers[cl](ex, Orange.core.GetBoth)                                       
    812                             if cr[0].isSpecial(): 
    813                                 raise "Classifier %s returned unknown value" % (classifiers[cl].name or ("#%i" % cl)) 
    814                             testResults.results[i].set_result(cl, cr[0], cr[1]) 
    815             if callback: 
    816                 callback() 
     827            one_fold_with_indices(learners, examples, fold, indices, testResults, pps, weight, cache, callback, 
     828                                  storeclassifiers) 
    817829        if cache: 
    818830            testResults.save_to_files(learners, fnstr) 
     
    847859    storeclassifiers = argkw.get("storeclassifiers", 0) or argkw.get("storeClassifiers", 0) 
    848860     
    849     for pp in pps: 
    850         if pp[0]=="B": 
    851             learnset = pp[1](learnset) 
    852             testset = pp[1](testset) 
    853  
    854     for pp in pps: 
    855         if pp[0]=="L": 
    856             learnset = pp[1](learnset) 
    857         elif pp[0]=="T": 
    858             testset = pp[1](testset) 
    859         elif pp[0]=="LT": 
    860             learnset, testset = pp[1](learnset, testset) 
     861    learnset, testset = preprocess_data(learnset, testset, preprocessors) 
    861862             
    862863    classifiers = [] 
Note: See TracChangeset for help on using the changeset viewer.