From b76da8ecc5b37f654d4f08ad8ff62225b2c576c5 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 7 Nov 2008 01:06:38 -0500 Subject: [PATCH] new warehouse: splitclassifier instead of harvesting --- warehouse.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/warehouse.py b/warehouse.py index 599f2eb..d4bd782 100644 --- a/warehouse.py +++ b/warehouse.py @@ -47,29 +47,24 @@ def doSensitivityAnalysis(ds, clfs, sensanas, splitter, sa_args=""): # run classifiers in cross-validation for label, clf in clfs.iteritems(): - cv = \ - CrossValidatedTransferError( - TransferError(clf), - splitter, - harvest_attribs=\ - ['transerror.clf.getSensitivityAnalyzer(force_training=False,' \ - 'transformer=None%s)()' % (sa_args)], + sclf = SplitClassifier(clf, splitter, enable_states=['confusion', 'training_confusion']) verbose(1, 'Doing cross-validation with ' + label) - # run cross-validation - merror = cv(ds) + # Compute sensitivity, which in turn trains the sclf + sensitivities = sclf.getSensitivityAnalyzer( + # do not combine sensitivities across splits, nor across classes + combiner=None, slave_combiner=None)(ds) + verbose(1, 'Accumulated confusion matrix for out-of-sample tests:\n' + - str(cv.confusion)) + str(sclf.confusion)) - # get harvested sensitivities for all splits - sensitivities = N.array(cv.harvested.values()[0]) # and store senses.append( - (label + ' (%.1f%% corr.) weights' % cv.confusion.stats['ACC%'], - sensitivities, cv.confusion, cv.training_confusion)) + (label + ' (%.1f%% corr.) weights' % sclf.confusion.stats['ACC%'], + sensitivities, sclf.confusion, sclf.training_confusion)) - verbose(1, 'Computing additional sensitvities') + verbose(1, 'Computing additional sensitivities') # wrap everything into SplitFeaturewiseMeasure # to get sense of variance across our artificial splits