Changeset 38:7aabb3dd2321 in orange-reliability


Ignore:
Timestamp:
10/02/13 15:38:27 (7 months ago)
Author:
markotoplak
Branch:
default
Message:

Added default estimators for ICV and Stacking. Fixed a bug in ICV if a correction is "nan".

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orangecontrib/reliability/__init__.py

    r37 r38  
    899899class Stacking: 
    900900 
    901     def __init__(self, stack_learner, estimators, folds=10, save_data=False): 
     901    def __init__(self, stack_learner, estimators=None, folds=10, save_data=False): 
    902902        self.stack_learner = stack_learner 
    903903        self.estimators = estimators 
    904904        self.folds = folds 
    905905        self.save_data = save_data 
     906        if self.estimators is None: 
     907             self.estimators = [SensitivityAnalysis(), 
     908                           LocalCrossValidation(), 
     909                           BaggingVarianceCNeighbours(), 
     910                           Mahalanobis(), 
     911                           MahalanobisToCenter()] 
    906912     
    907913    def __call__(self, data, learner): 
     
    9981004class ICV: 
    9991005    """ Perform internal cross validation (as in Automatic selection of 
    1000      reliability estimates for individual regression predictions, 
     1006    reliability estimates for individual regression predictions, 
    10011007    Zoran Bosnic, 2010) and return id of the method 
    10021008    that scored best on this data. 
    1003  
    1004  
    10051009    """ 
    10061010   
    1007     def __init__(self, estimators, folds=10): 
     1011    def __init__(self, estimators=None, folds=10): 
    10081012        self.estimators = estimators 
     1013        if self.estimators is None: 
     1014             self.estimators = [SensitivityAnalysis(), 
     1015                           LocalCrossValidation(), 
     1016                           BaggingVarianceCNeighbours(), 
     1017                           Mahalanobis(), 
     1018                           MahalanobisToCenter()] 
    10091019        self.folds = folds 
    10101020     
     
    10131023        cvi = Orange.data.sample.SubsetIndicesCV(data, self.folds) 
    10141024        sum_of_rs = defaultdict(float) 
     1025        n_rs = defaultdict(int) 
    10151026 
    10161027        elearner = Learner(learner, estimators=self.estimators) 
     
    10231034            res = Orange.evaluation.testing.learn_and_test_on_test_data([elearner], learn, test) 
    10241035            results = get_pearson_r(res) 
     1036     
    10251037            for r, p, sa, method in results: 
    1026                 sum_of_rs[(method, sa)] += r  
    1027  
    1028         sum_of_rs = sorted(sum_of_rs.items(), key=lambda estimate: estimate[1], reverse=True) 
    1029         chosen = sum_of_rs[0][0] 
    1030         print "chosen", chosen 
    1031         print sum_of_rs 
     1038                if not math.isnan(r): #ignore NaN values 
     1039                    sum_of_rs[(method, sa)] += r  
     1040                    n_rs[(method, sa)] += 1  
     1041 
     1042        avg_rs = [ (k,(sum_of_rs[k]/n_rs[k])) for k in sum_of_rs ] 
     1043 
     1044        avg_rs = sorted(avg_rs, key=lambda estimate: estimate[1], reverse=True) 
     1045        chosen = avg_rs[0][0] 
    10321046 
    10331047        lf = elearner(data) 
     
    10711085    """ 
    10721086    def __init__(self, box_learner, name="Reliability estimation", 
    1073                  estimators=[SensitivityAnalysis(), 
    1074                              LocalCrossValidation(), 
    1075                              BaggingVarianceCNeighbours(), 
    1076                              Mahalanobis(), 
    1077                              MahalanobisToCenter()], 
     1087                 estimators=None, 
    10781088                 **kwds): 
    10791089        self.__dict__.update(kwds) 
    10801090        self.name = name 
    10811091        self.estimators = estimators 
     1092        if self.estimators is None: 
     1093             self.estimators = [SensitivityAnalysis(), 
     1094                           LocalCrossValidation(), 
     1095                           BaggingVarianceCNeighbours(), 
     1096                           Mahalanobis(), 
     1097                           MahalanobisToCenter()] 
     1098  
    10821099        self.box_learner = box_learner 
    10831100        self.blending = False 
Note: See TracChangeset for help on using the changeset viewer.