Skip to content

BiasedMF

Biased Matrix Factorization for recommender systems.

The model equation is defined as:

\[\hat{y}(x) = \bar{y} + bu_{u} + bi_{i} + \langle \mathbf{v}_u, \mathbf{v}_i \rangle\]

Where \(bu_{u}\) and \(bi_{i}\) are respectively the user and item biases. The last term being simply the dot product between the latent vectors of the given user-item pair:

\[\langle \mathbf{v}_u, \mathbf{v}_i \rangle = \sum_{f=1}^{k} \mathbf{v}_{u, f} \cdot \mathbf{v}_{i, f}\]

where \(k\) is the number of latent factors.

This model expects a dict input with a user and an item entries without any type constraint on their values (i.e. can be strings or numbers). Other entries are ignored.

Parameters

  • n_factors

    Default10

    Dimensionality of the factorization or number of latent factors.

  • bias_optimizer

    Typeoptim.base.Optimizer | None

    DefaultNone

    The sequential optimizer used for updating the bias weights.

  • latent_optimizer

    Typeoptim.base.Optimizer | None

    DefaultNone

    The sequential optimizer used for updating the latent weights.

  • loss

    Typeoptim.losses.Loss | None

    DefaultNone

    The loss function to optimize for.

  • l2_bias

    Default0.0

    Amount of L2 regularization used to push bias weights towards 0.

  • l2_latent

    Default0.0

    Amount of L2 regularization used to push latent weights towards 0.

  • weight_initializer

    Typeoptim.initializers.Initializer | None

    DefaultNone

    Weights initialization scheme.

  • latent_initializer

    Typeoptim.initializers.Initializer | None

    DefaultNone

    Latent factors initialization scheme.

  • clip_gradient

    Default1000000000000.0

    Clips the absolute value of each gradient value.

  • seed

    DefaultNone

    Random number generation seed. Set this for reproducibility.

Attributes

  • global_mean (stats.Mean)

    The target arithmetic mean.

  • u_biases (collections.defaultdict)

    The user bias weights.

  • i_biases (collections.defaultdict)

    The item bias weights.

  • u_latents (collections.defaultdict)

    The user latent vectors randomly initialized.

  • i_latents (collections.defaultdict)

    The item latent vectors randomly initialized.

  • u_bias_optimizer (optim.base.Optimizer)

    The sequential optimizer used for updating the user bias weights.

  • i_bias_optimizer (optim.base.Optimizer)

    The sequential optimizer used for updating the item bias weights.

  • u_latent_optimizer (optim.base.Optimizer)

    The sequential optimizer used for updating the user latent weights.

  • i_latent_optimizer (optim.base.Optimizer)

    The sequential optimizer used for updating the item latent weights.

Examples

from river import optim
from river import reco

dataset = (
    ({'user': 'Alice', 'item': 'Superman'}, 8),
    ({'user': 'Alice', 'item': 'Terminator'}, 9),
    ({'user': 'Alice', 'item': 'Star Wars'}, 8),
    ({'user': 'Alice', 'item': 'Notting Hill'}, 2),
    ({'user': 'Alice', 'item': 'Harry Potter'}, 5),
    ({'user': 'Bob', 'item': 'Superman'}, 8),
    ({'user': 'Bob', 'item': 'Terminator'}, 9),
    ({'user': 'Bob', 'item': 'Star Wars'}, 8),
    ({'user': 'Bob', 'item': 'Notting Hill'}, 2)
)

model = reco.BiasedMF(
    n_factors=10,
    bias_optimizer=optim.SGD(0.025),
    latent_optimizer=optim.SGD(0.025),
    latent_initializer=optim.initializers.Normal(mu=0., sigma=0.1, seed=71)
)

for x, y in dataset:
    model.learn_one(**x, y=y)

model.predict_one(user='Bob', item='Harry Potter')
6.489025

Methods

learn_one

Fits a user-item pair and a real-valued target y.

Parameters

  • user'ID'
  • item'ID'
  • y'Reward'
  • x'dict | None' — defaults to None

predict_one

Predicts the target value of a set of features x.

Parameters

  • user'ID'
  • item'ID'
  • x'dict | None' — defaults to None

Returns

Reward: The predicted preference from the user for the item.

rank

Rank models by decreasing order of preference for a given user.

Parameters

  • user'ID'
  • items'set[ID]'
  • x'dict | None' — defaults to None