Home | Trees | Indices | Help |
|
---|
|
1 # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- 2 # vi: set ft=python sts=4 ts=4 sw=4 et: 3 ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## 4 # 5 # See COPYING file distributed along with the PyMVPA package for the 6 # copyright and license terms. 7 # 8 ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## 9 """Unit tests for PyMVPA transformers.""" 10 11 import unittest 12 import numpy as N 13 from numpy.testing import assert_array_almost_equal 14 15 from mvpa.base import externals 16 17 from mvpa.misc.transformers import Absolute, OneMinus, RankOrder, \ 18 ReverseRankOrder, L1Normed, L2Normed, OverAxis, \ 19 DistPValue, FirstAxisSumNotZero 20 21 from tests_warehouse import sweepargs, datasets 22 23 from mvpa.base import cfg 2426 30130 13132 # generate 100 values (gaussian noise mean -1000 -> all negative) 33 out = Absolute(N.random.normal(-1000, size=100)) 34 35 self.failUnless(out.min() >= 0) 36 self.failUnless(len(out) == 100)37 4244 src = [[ 1, -22.9, 6.8, 0], 45 [ -.8, 7, 0, 0.0], 46 [88, 0, 0.0, 0], 47 [0, 0, 0, 0.0]] 48 target = N.array([ 3, 2, 1, 0]) 49 out = FirstAxisSumNotZero(src) 50 self.failUnless((out == target).all())5153 nelements = len(self.d2) 54 out = RankOrder(self.d2) 55 outr = ReverseRankOrder(self.d2) 56 uout = N.unique(out) 57 uoutr = N.unique(outr) 58 self.failUnless((uout == N.arange(nelements)).all(), 59 msg="We should get all indexes. Got just %s" % uout) 60 self.failUnless((uoutr == N.arange(nelements)).all(), 61 msg="We should get all indexes. Got just %s" % uoutr) 62 self.failUnless((out+outr+1 == nelements).all()) 63 self.failUnless((out == [ 0, 3, 4, 1, 5, 2]).all())64 68 72 7375 data = datasets['uni4large'].samples[:120,0].reshape((2,3,4,5)) 76 # Simple transformer/combiner which collapses across given 77 # dimension, e.g. sum 78 for axis in [None, 0, 1, 2]: 79 oversum = OverAxis(N.sum, axis=axis)(data) 80 sum_ = N.sum(data, axis=axis) 81 assert_array_almost_equal(sum_, oversum) 82 83 # Transformer which doesn't modify dimensionality of the data 84 data = data.reshape((6, -1)) 85 overnorm = OverAxis(L2Normed, axis=1)(data) 86 self.failUnless(N.linalg.norm(overnorm)!=1.0) 87 for d in overnorm: 88 self.failUnless(N.abs(N.linalg.norm(d) - 1.0)<0.00001) 89 90 overnorm = OverAxis(L2Normed, axis=0)(data) 91 self.failUnless(N.linalg.norm(overnorm)!=1.0) 92 for d in overnorm.T: 93 self.failUnless(N.abs(N.linalg.norm(d) - 1.0)<0.00001)94 9597 """Basic testing of DistPValue""" 98 if not externals.exists('scipy'): 99 return 100 ndb = 200 101 ndu = 20 102 nperd = 2 103 pthr = 0.05 104 Nbins = 400 105 106 # Lets generate already normed data (on sphere) and add some nonbogus features 107 datau = (N.random.normal(size=(nperd, ndb))) 108 dist = N.sqrt((datau * datau).sum(axis=1)) 109 110 datas = (datau.T / dist.T).T 111 tn = datax = datas[0, :] 112 dataxmax = N.max(N.abs(datax)) 113 114 # now lets add true positive features 115 tp = [-dataxmax * 1.1] * (ndu/2) + [dataxmax * 1.1] * (ndu/2) 116 x = N.hstack((datax, tp)) 117 118 # lets add just pure normal to it 119 x = N.vstack((x, N.random.normal(size=x.shape))).T 120 for distPValue in (DistPValue(), DistPValue(fpp=0.05)): 121 result = distPValue(x) 122 self.failUnless((result>=0).all) 123 self.failUnless((result<=1).all) 124 125 if cfg.getboolean('tests', 'labile', default='yes'): 126 self.failUnless(distPValue.positives_recovered[0] > 10) 127 self.failUnless((N.array(distPValue.positives_recovered) + 128 N.array(distPValue.nulldist_number) == ndb + ndu).all()) 129 self.failUnless(distPValue.positives_recovered[1] == 0)133 return unittest.makeSuite(TransformerTests)134 135 136 if __name__ == '__main__': 137 import runner 138
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Mon Jun 24 16:41:31 2013 | http://epydoc.sourceforge.net |