from sklearn.decomposition import NMF as _NMF from base import BaseAlgo, TransformerMixin from codec import codecs_manager from util.param_util import convert_params class NMF(TransformerMixin, BaseAlgo): def __init__(self, options): self.handle_options(options) out_params = convert_params( options.get('params', {}), floats=['beta_loss','tol','alpha','l1_ratio'], strs=['init','solver'], ints=['k','max_iter','random_state'], bools=['versbose','shuffle'], aliases={'k': 'n_components'} ) self.estimator = _NMF(**out_params) def rename_output(self, default_names, new_names): if new_names is None: new_names = 'NMF' output_names = ['{}_{}'.format(new_names, i+1) for i in xrange(len(default_names))] return output_names @staticmethod def register_codecs(): from codec.codecs import SimpleObjectCodec codecs_manager.add_codec('algos_contrib.NMF', 'NMF', SimpleObjectCodec) codecs_manager.add_codec('sklearn.decomposition.nmf', 'NMF', SimpleObjectCodec)