# FMRegressor¶

Factorization Machine for regression.

The model equation is defined as:

$\hat{y}(x) = w_{0} + \sum_{j=1}^{p} w_{j} x_{j} + \sum_{j=1}^{p} \sum_{j'=j+1}^{p} \langle \mathbf{v}_j, \mathbf{v}_{j'} \rangle x_{j} x_{j'}$

Where $$\mathbf{v}_j$$ and $$\mathbf{v}_{j'}$$ are $$j$$ and $$j'$$ latent vectors, respectively.

For more efficiency, this model automatically one-hot encodes strings features considering them as categorical variables.

## Parameters¶

• n_factors – defaults to 10

Dimensionality of the factorization or number of latent factors.

• weight_optimizer (optim.base.Optimizer) – defaults to None

The sequential optimizer used for updating the feature weights. Note that the intercept is handled separately.

• latent_optimizer (optim.base.Optimizer) – defaults to None

The sequential optimizer used for updating the latent factors.

• loss (optim.losses.RegressionLoss) – defaults to None

The loss function to optimize for.

• sample_normalization – defaults to False

Whether to divide each element of x by x's L2-norm.

• l1_weight – defaults to 0.0

Amount of L1 regularization used to push weights towards 0.

• l2_weight – defaults to 0.0

Amount of L2 regularization used to push weights towards 0.

• l1_latent – defaults to 0.0

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

• l2_latent – defaults to 0.0

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

• intercept – defaults to 0.0

Initial intercept value.

• intercept_lr (Union[optim.base.Scheduler, float]) – defaults to 0.01

Learning rate scheduler used for updating the intercept. An instance of optim.schedulers.Constant is used if a float is passed. No intercept will be used if this is set to 0.

• weight_initializer (optim.base.Initializer) – defaults to None

Weights initialization scheme. Defaults to optim.initializers.Zeros().

• latent_initializer (optim.base.Initializer) – defaults to None

Latent factors initialization scheme. Defaults to optim.initializers.Normal(mu=.0, sigma=.1, random_state=self.random_state).

• clip_gradient – defaults to 1000000000000.0

Clips the absolute value of each gradient value.

• seed (int) – defaults to None

Randomization seed used for reproducibility.

## Attributes¶

• weights

The current weights assigned to the features.

• latents

The current latent weights assigned to the features.

## Examples¶

>>> from river import facto

>>> 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 = facto.FMRegressor(
...     n_factors=10,
...     intercept=5,
...     seed=42,
... )

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

>>> model.predict_one({'Bob': 1, 'Harry Potter': 1})
5.236504

>>> report = model.debug_one({'Bob': 1, 'Harry Potter': 1})

>>> print(report)
Name                 Value      Weight     Contribution
Intercept    1.00000    5.23426        5.23426
Bob - Harry Potter    1.00000    0.00224        0.00224
Harry Potter    1.00000    0.00000        0.00000
Bob    1.00000    0.00000        0.00000


## Methods¶

debug_one

Debugs the output of the FM regressor.

Parameters

• x (dict)
• decimals (int) – defaults to 5

Returns

str: A table which explains the output.

learn_one

Fits to a set of features x and a real-valued target y.

Parameters

• x (dict)
• y (numbers.Number)
• sample_weight – defaults to 1.0

Returns

Regressor: self

predict_one

Predict the output of features x.

Parameters

• x

Returns

The prediction.