Implicit Collaborative Filtering

0.7.2 · active · verified Wed Apr 15

Implicit is a Python library that provides fast Python implementations of popular collaborative filtering recommendation algorithms for implicit feedback datasets. It includes models like Alternating Least Squares (ALS), BPR (Bayesian Personalized Ranking), and various Nearest-Neighbours models. The library leverages Cython, NumPy, and SciPy for performance, with optional GPU acceleration using CUDA. The current version is 0.7.2, and new versions are released periodically, often every few months, with a focus on performance, new features, and bug fixes.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to train an AlternatingLeastSquares model on a sparse user-item interaction matrix and then generate recommendations for a user and find similar items. The input matrix must be a `scipy.sparse.csr_matrix`.

import numpy as np
from scipy.sparse import csr_matrix
from implicit.als import AlternatingLeastSquares

# Sample data: user-item interactions (user_id, item_id, strength)
data = np.array([1, 1, 1, 1, 1, 1])
rows = np.array([0, 0, 1, 1, 2, 2]) # User IDs
cols = np.array([0, 1, 1, 2, 0, 2]) # Item IDs

# Create a sparse user-item matrix (users x items)
# This is typically a CSR matrix for performance and compatibility.
user_items = csr_matrix((data, (rows, cols)), dtype=np.float32)

# Initialize and train the AlternatingLeastSquares model
model = AlternatingLeastSquares(factors=64, regularization=0.01, iterations=20, random_state=42)
model.fit(user_items) # Model expects user_items (users x items) matrix

# Recommend items for a specific user (e.g., user 0)
user_id = 0
# The recommend method takes the user_id and the user_items matrix for that user.
recommended_items, scores = model.recommend(user_id, user_items[user_id])

print(f"Recommended items for user {user_id}: {recommended_items}")
print(f"Scores: {scores}")

# Get similar items for a specific item (e.g., item 0)
item_id = 0
similar_items, scores = model.similar_items(item_id)
print(f"Items similar to item {item_id}: {similar_items}")
print(f"Scores: {scores}")

view raw JSON →