Skip to main content

Mixed Membership Stochastic Block Models

Build Status

This library converts this work on Mixed Membership Stochastic Block Models to build a recommender system [1] into a library to be used with more generic data.

Installation

pip install mmsbm

Usage

Input data

You'll need a pandas dataframe with exactly 3 columns: users, items and ratings, e.g.:

import pandas as pd
from random import choice

train = pd.DataFrame(
    {
    "users": [f"user{choice(list(range(5)))}" for _ in range(100)],
    "items": [f"item{choice(list(range(10)))}" for _ in range(100)],
    "ratings": [choice(list(range(1, 6))) for _ in range(100)]
    }
)

test = pd.DataFrame(
    {
    "users": [f"user{choice(list(range(5)))}" for _ in range(50)],
    "items": [f"item{choice(list(range(10)))}" for _ in range(50)],
    "ratings": [choice(list(range(1, 6))) for _ in range(50)]
    }
)

Setup

from mmsbm import MMSBM

# Initialize the MMSBM class:
mmsbm = MMSBM(
    user_groups=2,
    item_groups=4,
    iterations=500,
    sampling=5,
    seed=1,
)

Fit models

In here you have two options, a simple fit where we run "sampling" times the fitting algorithm and return the results for all runs, you are then in charge of choosing the best one.

mmsbm.fit(train)

The other option is the cv_fit (cross-validated fit) function, whereby we split the input data in "folds" number of folds and run the fitting in each one and test on the excluded fold. We then return all the samplings of the best performing model. The function returns a list of the accuracies for each fold so that you can get confidence intervals on them.

accuracies = mmsbm.cv_fit(train, folds=5)

Prediction

Once the model is fitted, we can predict on test data. The function predict returns the prediction matrix (the probability of each user to belong to each group) as a numpy array.

pred_matrix = mmsbm.predict(test)

Score

Finally, you can get statistics about the goodness of fit and other parameters of the model, as well as the computed objects: the theta matrix, the eta matrix and the probability distributions.

The function score returns a dictionary with two sub-dictionaries, one for statistics about the model (called "stats") and the other one with the computed objects (called "objects").

results = mmsbm.score()

Performance

Each iteration takes a little about half a second in an Intel i7. This means that a 500 iteration runs takes around 4 minutes. The computation is vectorized, so, as long as you don't go crazy with the number of observations, the time should be approximately the same regardless of training set size. It is also parallelized over sampling, so, as long as you choose less sampling than number of cores, you should have approximately the same performance regardless of training set size and sampling number.

Tests

To run tests do the following:

python -m pytest tests/*

TODO

  • Progress bars are not working for jupyter notebooks.
  • Include user_groups and item_groups optimization procedure.
  • The cv_fit test is not working on travis.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

References

[1]: Godoy-Lorite, Antonia, et al. "Accurate and scalable social recommendation using mixed-membership stochastic block models." Proceedings of the National Academy of Sciences 113.50 (2016): 14207-14212.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mmsbm-0.1.4.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mmsbm-0.1.4-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file mmsbm-0.1.4.tar.gz.

File metadata

  • Download URL: mmsbm-0.1.4.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.4

File hashes

Hashes for mmsbm-0.1.4.tar.gz
Algorithm Hash digest
SHA256 af1132851c749b9f57bda3066fb96bccb4be9a974d857c3079a6c9555ba0bd29
MD5 a099927c06644565bf66322020d9065a
BLAKE2b-256 b283a43410258ce353f00b30dc1ff17884454e09bbc15b5f9272bc93d26bb2d7

See more details on using hashes here.

File details

Details for the file mmsbm-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: mmsbm-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.4

File hashes

Hashes for mmsbm-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4a088cca028a1d9d3b581503f08b901cfb13f55867087d1cc85b96ad6b43073e
MD5 864af2c5b136ce9df260d0e32801d616
BLAKE2b-256 9ce6b33406f028c09939adee1a5c8dcb48c569898b6a6b581a9888a1e1d4df8c

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.7

2 files

1.0.6

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.4

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

This release

0.1.4 This release

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.7

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page