Metadata-Version: 2.1
Name: eals
Version: 0.9.2
Summary: eALS - Element-wise Alternating Least Squares
Home-page: https://github.com/newspicks
Author: Akira Kitauchi
Author-email: kitauchi@gmail.com
Requires-Python: >=3.8,<3.10
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Dist: joblib (>=1.0.1,<2.0.0)
Requires-Dist: numba (>=0.53.1,<0.54.0)
Requires-Dist: scipy (>=1.5.4,<2.0.0)
Project-URL: Repository, https://github.com/newspicks/eals
Description-Content-Type: text/markdown

# eALS - Element-wise Alternating Least Squares

A Python implementation of the element-wise alternating least squares (eALS) for fast online matrix factorization proposed by [arXiv:1708.05024](https://arxiv.org/abs/1708.05024).

## Prerequisites

- Python >= 3.8

## Installation

```sh
pip install eals
```

## Usage

```python
import numpy as np
import scipy.sparse as sps
from eals import ElementwiseAlternatingLeastSquares, load_model

# Batch training
user_items = sps.csr_matrix([[1, 2, 0, 0], [0, 3, 1, 0], [0, 4, 0, 4]], dtype=np.float32)
model = ElementwiseAlternatingLeastSquares(factors=2)
model.fit(user_items)

# Learned latent vectors
model.user_factors
model.item_factors

# Online training for new data (user_id, item_id)
model.update_model(1, 0)
# Expand matrices for a new user or item
model.update_model(0, 5)

# Save and load the model
model.save("model.joblib")
model = load_model("model.joblib")
```

See the [examples](examples/) directory for complete examples.

## Development

### Setup development environment

```sh
git clone https://github.com/newspicks/eals.git
cd eals
poetry run pip install -U pip
poetry install
```

### Tests

```sh
poetry run pytest
```

Set `USE_NUMBA=0` for faster testing without numba JIT overhead.

```sh
USE_NUMBA=0 poetry run pytest
```

To run tests against all supported Python versions, use [tox](https://tox.readthedocs.io/).
You may need to put the Python version numbers in the `.python-version` file.

```sh
poetry run tox
```

