nmf_projection
This library implements Non-negative Matrix Factorization (NMF) for continuous datasets whose attribute values are all non-negative. It learns a non-negative basis using deterministic multiplicative updates and represents each transformed instance as a list of non-negative component weights.
API documentation
Open the ../../apis/library_index.html#nmf_projection link in a web browser.
Loading
To load all entities in this library, load the loader.lgt file:
| ?- logtalk_load(nmf_projection(loader)).
Testing
To test this library predicates, load the tester.lgt file:
| ?- logtalk_load(nmf_projection(tester)).
Features
Implements deterministic multiplicative-update training for NMF.
Requires all training and inference attribute values to be non-negative.
Supports exporting learned reducers and reloading them for later use.
Records diagnostics including convergence status, iteration count, final update delta, and reconstruction error.
Options
n_components/1Number of latent components to learn. The current implementation requires the requested count to not exceed the minimum of the sample count and the number of features. Larger requests raise
domain_error(component_count, Requested-Maximum).center/1Always
false. Centering is intentionally disabled because NMF requires non-negative features.feature_scaling/1When
true, each continuous attribute is divided by its maximum observed training value. Whenfalse, raw non-negative values are used.maximum_iterations/1Maximum number of multiplicative-update iterations used during both training and per-instance coefficient inference.
tolerance/1Stop iteration when the maximum absolute update delta is less than or equal to this value.
Usage
Assuming a dataset object parts_based_measurements implementing the
dimension_reduction_dataset_protocol protocol:
| ?- nmf_projection::learn(parts_based_measurements, DimensionReducer).
| ?- nmf_projection::learn(parts_based_measurements, DimensionReducer, [n_components(2), feature_scaling(true), maximum_iterations(250), tolerance(1.0e-7)]).
| ?- nmf_projection::learn(parts_based_measurements, DimensionReducer),
nmf_projection::transform(DimensionReducer, [f1-3.0, f2-0.0, f3-1.5, f4-0.0], ReducedInstance).
| ?- nmf_projection::learn(parts_based_measurements, DimensionReducer, [n_components(2)]),
nmf_projection::export_to_file(parts_based_measurements, DimensionReducer, reducer, 'nmf_reducer.pl').
| ?- logtalk_load('nmf_reducer.pl'),
reducer(Reducer),
nmf_projection::transform(Reducer, [f1-3.0, f2-0.0, f3-1.5, f4-0.0], ReducedInstance).
Dimension reducer representation
Learned NMF reducers use the representation:
nmf_reducer(Encoders, Components, Diagnostics)
where Encoders stores the continuous attribute encoders used to map
instances into a non-negative feature vector, Components stores the
learned non-negative basis vectors, and Diagnostics stores metadata
about the learned reducer.
References
Daniel D. Lee and H. Sebastian Seung. Algorithms for Non-negative Matrix Factorization. Advances in Neural Information Processing Systems 13, 2001.