This repository provides a Python library that implements the Elastic Boolean Matrix Factorization (Elbmf) algorithm using PyTorch. It provides an efficient methods for factorizing binary matrices into low-rank matrices using a continuous relaxation, an elastic-net inspired Boolean regularization, and proximal gradient descent.
This project is based on the research paper 'Efficiently Factorizing Boolean Matrices using Proximal Gradient Descent'
@inproceedings{dalleiger2022efficiently, title={Efficiently Factorizing Boolean Matrices using Proximal Gradient Descent}, author={Sebastian Dalleiger and Jilles Vreeken}, booktitle={Thirty-Sixth Conference on Neural Information Processing Systems (NeurIPS)}, year={2022} }
pip install torch pip install git+https://github.com/sdall/elbmf-python
import torch from elbmf import elbmf X = torch.randint(0, 2, (100, 100)) U, V = elbmf( X = X, # a Boolean n*m matrix n_components = 20, # number of components l1reg = 0.01, # l1 coefficient l2reg = 0.02, # l2 coefficient regularization_rate = lambda t: 1.02**t, # monotonically increasing regularization-rate function maxiter = 3000, # maximum number of iterations tolerance = 1e-8, # the threshold to the absolute difference between the current and previous losses determines the convergence beta = 0.0001, # inertial coefficient of iPALM callback = None, # e.g. lambda t, U, V, fn: print(t, fn) with_rounding = True) # rounds U and V in case of early stopping
If the resulting reconstruction is unexpected or not ideal,
you might want to try to tweak l1reg, l2reg, maxiter, and most importantly the regularization_rate,
with disabled with_rounding (for debugging purposes) and enabled callback.
Contributions to Elbmf are welcome. If you find any issues or have suggestions for improvements, please open an issue or submit a pull request on the GitHub repository: https://github.com/sdall/elbmf-python
This project is licensed under the MIT License. See the LICENSE file for more details.
If you have any questions or inquiries, please contact [email protected].
Feel free to reach out with any feedback or suggestions.