def __init__(self, k, alg='LLE', nodeargs=None, **kwargs): """ Parameters ---------- k : int Number of nearest neighbors to be used by the algorithm. algorithm : {'LLE', 'HLLE'} Either use the standard LLE algorithm or Hessian Linear Local Embedding (HLLE). nodeargs : None or dict Arguments passed to the MDP node in various stages of its lifetime. See the baseclass for more details. **kwargs Additional constructor arguments for the MDP node. """ if alg == 'LLE': node = mdp.nodes.LLENode(k, **kwargs) elif alg == 'HLLE': node = mdp.nodes.HLLENode(k, **kwargs) else: raise ValueError("Unkown algorithm '%s' for LLEMapper.") MDPNodeMapper.__init__(self, node, nodeargs=nodeargs)
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)