PyBMF¶
A Python library for Boolean Matrix Factorization. Work under Preferred.ai.
PyBMF is under active development. We welcome the authors of BMF papers and those interested in BMF to play around and contribute. Please contact us if you have any questions or suggestions.
Prospectives¶
Boolean matrix factorization (BMF) is a well-known problem in pattern mining. Throughout the years of prosperous research, it has evolved from greedy heuristics to include a wide range of advanced technologies. We hold the belief that a playground with fairness and adaptiveness is necessary for the development of such algorithms.
PyBMF aims to provide a unified framework with:
generatorsfor various types of synthetic dataeasy ways of importing and sampling real-world
datasetslikeMovieLensDataandNetflixDatadata
RatioSplitandCrossValidationutilitiestools for generating
negative_sample()when neededcompatibility of
scipy.sparsematrices when it cantools to
evaluate()using binary and continuous metricsvisualization tools to
show_matrix()in single or multi-matrix modetools to
save_modelandshow_logsin HTML or OverLeaf withlogs2htmlandlogs2latexability to incorporate Boolean matrix simplification and visualization
modelsin planned future
Models¶
Category |
Model |
Paper |
Original Implementation |
In PyBMF |
|---|---|---|---|---|
Heuristics |
Asso |
✅ |
||
Heuristics |
Hyper/Hyper+ |
✅ |
||
Heuristics |
GreConD |
✅ |
||
Heuristics |
Panda |
✅ |
||
Heuristics |
Panda+ |
✅ |
||
Heuristics |
NASSAU |
|||
Heuristics |
GreConD+ |
✅ |
||
Heuristics |
MEBF |
✅ |
||
Continuous |
NMFSklearn |
🛞 Wrapper of sklearn.nmf |
||
Continuous |
WNMF |
✅ Multiplicative update |
||
Continuous |
BinaryMF-Penalty |
✅ Multiplicative update |
||
Continuous |
BinaryMF-Thresholding |
✅ Line search |
||
Continuous |
FastStep |
✅ Line search |
||
Continuous |
PRIMP |
✅ PALM |
||
Continuous |
PNL-PF |
✅ Multiplicative update |
||
Continuous |
ELBMF |
✅ PALM |
||
Probablistic |
MessagePassing |
🛞 Wrapper of original implementation |
||
Probablistic |
OrMachine |
🛞 Wrapper of original implementation |
||
Linear Optimization |
ColumnGeneration |
🛞 Wrapper of original implementation |
||
Satisfiability |
UndercoverBMF |
🛞 Wrapper of original implementation |
||
Simplification |
IterEss |
|||
Simplification |
DelegationBMF |
|||
Visualization |
OrderedBMF |
|||
Visualization |
BiclusterVisualization |
How to use PyBMF¶
Check Examples that help you get started with PyBMF.
Check Models in which you can implement your own models.
Compatibility¶
Currently built and tested on Python 3.9.18.
TO-DO¶
[x] Diagnosis of thresholding models
[x] Fix DataFrame display utils in dataframe_utils.py
[ ] Add mask parameter W to PRIMP and ELBMF
[ ] Make a page dedicated to contributors and references
[ ] Include BMF visualization models
[ ] Include BMF simplification models
Subpackages¶
- PyBMF.datasets package
- Submodules
- PyBMF.datasets.BaseData module
- PyBMF.datasets.BaseSplit module
- PyBMF.datasets.CrossValidation module
- PyBMF.datasets.MovieLensData module
- PyBMF.datasets.MovieLensGenreCastData module
- PyBMF.datasets.MovieLensGenreCastUserData module
- PyBMF.datasets.MovieLensUserData module
- PyBMF.datasets.NetflixData module
- PyBMF.datasets.NetflixGenreCastData module
- PyBMF.datasets.NoSplit module
- PyBMF.datasets.RatioSplit module
- Module contents
- PyBMF.generators package
- Submodules
- PyBMF.generators.BaseGenerator module
BaseGeneratorBaseGenerator.add_noise()BaseGenerator.boolean_matmul()BaseGenerator.check_params()BaseGenerator.generate()BaseGenerator.generate_factor()BaseGenerator.generate_factors()BaseGenerator.measure()BaseGenerator.measure_density()BaseGenerator.measure_overlap()BaseGenerator.set_config()BaseGenerator.set_factor_info()BaseGenerator.set_params()BaseGenerator.show_matrix()BaseGenerator.shuffle()BaseGenerator.shuffle_factors()BaseGenerator.sorted_index()BaseGenerator.sortout()BaseGenerator.to_dense()BaseGenerator.to_sparse()
- PyBMF.generators.BlockDiagonalMatrixGenerator module
- PyBMF.generators.BlockMatrixGenerator module
- PyBMF.generators.SyntheticMatrixGenerator module
- Module contents
- PyBMF.models package
- Submodules
- PyBMF.models.Asso module
- PyBMF.models.AssoIter module
- PyBMF.models.AssoOpt module
- PyBMF.models.BaseModel module
- PyBMF.models.BaseModelTools module
BaseModelToolsBaseModelTools._early_stop()BaseModelTools._init_factors()BaseModelTools._init_logs()BaseModelTools._make_name()BaseModelTools._save_model()BaseModelTools._show_logs()BaseModelTools._show_result()BaseModelTools._start_timer()BaseModelTools._stop_timer()BaseModelTools.early_stop()BaseModelTools.extend_factors()BaseModelTools.import_model()BaseModelTools.print_msg()BaseModelTools.set_config()BaseModelTools.set_factors()BaseModelTools.set_params()BaseModelTools.truncate_factors()
- PyBMF.models.BinaryMFPenalty module
- PyBMF.models.BinaryMFThreshold module
- PyBMF.models.ContinuousModel module
- PyBMF.models.ELBMF module
- PyBMF.models.ELBMFNumPy module
- PyBMF.models.ELBMFPyTorch module
- PyBMF.models.FastStep module
- PyBMF.models.GreConD module
- PyBMF.models.GreConDPlus module
- PyBMF.models.Hyper module
- PyBMF.models.HyperPlus module
- PyBMF.models.IP module
- PyBMF.models.MEBF module
- PyBMF.models.MaxSAT module
- PyBMF.models.MessagePassing module
- PyBMF.models.NMFSklearn module
- PyBMF.models.OrMachine module
- PyBMF.models.PNLPF module
- PyBMF.models.PRIMP module
- PyBMF.models.PRIMPPyTorch module
- PyBMF.models.Panda module
- PyBMF.models.TransposedModel module
- PyBMF.models.WNMF module
- Module contents
- PyBMF.solvers package
- PyBMF.utils package
- Submodules
- PyBMF.utils.boolean_utils module
- PyBMF.utils.collective_display_utils module
- PyBMF.utils.collective_evaluate_utils module
- PyBMF.utils.collective_transform_utils module
- PyBMF.utils.collective_utils module
- PyBMF.utils.common module
- PyBMF.utils.data_utils module
- PyBMF.utils.dataframe_utils module
- PyBMF.utils.decorator_utils module
- PyBMF.utils.display module
- PyBMF.utils.evaluate_utils module
- PyBMF.utils.experiment_utils module
- PyBMF.utils.generator_utils module
- PyBMF.utils.metrics module
- PyBMF.utils.sparse_utils module
- Module contents