1
2
3
4
5
6
7
8
9 """Unit tests for PyMVPA Regressions"""
10
11 from mvpa.base import externals
12 from mvpa.support.copy import deepcopy
13
14 from mvpa.datasets import Dataset
15 from mvpa.mappers.mask import MaskMapper
16 from mvpa.datasets.splitters import NFoldSplitter, OddEvenSplitter
17
18 from mvpa.misc.errorfx import RMSErrorFx, RelativeRMSErrorFx, \
19 CorrErrorFx, CorrErrorPFx
20
21 from mvpa.clfs.meta import SplitClassifier
22 from mvpa.clfs.transerror import TransferError
23 from mvpa.misc.exceptions import UnknownStateError
24
25 from mvpa.algorithms.cvtranserror import CrossValidatedTransferError
26
27 from tests_warehouse import *
28 from tests_warehouse_clfs import *
31
32 @sweepargs(ml=clfswh['regression']+regrswh[:])
34 """Test If binary regression-based classifiers have proper tag
35 """
36 self.failUnless(('binary' in ml._clf_internals) != ml.regression,
37 msg="Inconsistent markin with binary and regression features"
38 " detected in %s having %s" % (ml, `ml._clf_internals`))
39
40 @sweepargs(regr=regrswh['regression'])
42 """Simple tests on regressions
43 """
44 ds = datasets['chirp_linear']
45
46 cve = CrossValidatedTransferError(
47 TransferError(regr, CorrErrorFx()),
48 splitter=NFoldSplitter(),
49 enable_states=['training_confusion', 'confusion'])
50 corr = cve(ds)
51
52 self.failUnless(corr == cve.confusion.stats['CCe'])
53
54 splitregr = SplitClassifier(regr,
55 splitter=OddEvenSplitter(),
56 enable_states=['training_confusion', 'confusion'])
57 splitregr.train(ds)
58 split_corr = splitregr.confusion.stats['CCe']
59 split_corr_tr = splitregr.training_confusion.stats['CCe']
60
61 for confusion, error in ((cve.confusion, corr),
62 (splitregr.confusion, split_corr),
63 (splitregr.training_confusion, split_corr_tr),
64 ):
65
66
67 for conf in confusion.summaries:
68 stats = conf.stats
69 self.failUnless(stats['CCe'] < 0.5)
70 self.failUnlessEqual(stats['CCe'], stats['Summary CCe'])
71
72 s0 = confusion.asstring(short=True)
73 s1 = confusion.asstring(short=False)
74
75 for s in [s0, s1]:
76 self.failUnless(len(s) > 10,
77 msg="We should get some string representation "
78 "of regression summary. Got %s" % s)
79
80 self.failUnless(error < 0.2,
81 msg="Regressions should perform well on a simple "
82 "dataset. Got correlation error of %s " % error)
83
84
85
86
87
88
89
90 self.failUnless(confusion.stats['CCe'] < 0.5)
91
92 split_predictions = splitregr.predict(ds.samples)
93
94
95
96
97
98
99 @sweepargs(clf=clfswh['regression'])
114
119
120
121 if __name__ == '__main__':
122 import runner
123