def test_mdpnodemapper(): ds = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) node = mdp.nodes.PCANode() mm = MDPNodeMapper(node, nodeargs={'stoptrain': ((), {'debug': True})}) mm.train(ds) fds = mm.forward(ds) if externals.versions['mdp'] >= '2.5': assert_true(hasattr(mm.node, 'cov_mtx')) assert_true(isinstance(fds, Dataset)) assert_equal(fds.samples.shape, ds.samples.shape) # set projection onto first 2 components mm.nodeargs['exec'] = ((), {'n': 2}) #should be different from above lfds = mm.forward(ds.samples) # output shape changes although the node still claim otherwise assert_equal(mm.node.output_dim, 4) assert_equal(lfds.shape[0], fds.samples.shape[0]) assert_equal(lfds.shape[1], 2) assert_array_equal(lfds, fds.samples[:, :2]) # reverse rfds = mm.reverse(fds) # even smaller size works rlfds = mm.reverse(lfds) assert_equal(rfds.samples.shape, ds.samples.shape) # retraining has to work on a new dataset too, since we copy the node # internally dsbig = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=10) mm.train(dsbig)