在SVD的基础上在用户特征矩阵上加入用户的偏好。某个用户对某个电影进行了评分,那么说明他看过这部电影,那么这样的行为事实上蕴含了一定的信息,因此我们可以这样来理解问题:评分的行为从侧面反映了用户的喜好,可以将这样的反映通过隐式参数的形式体现在模型中,从而得到一个更为精细的模型,便是 SVD++.
预测评分为:

目标函数:

参数更新式:

# -*- coding:utf-8 -*-
from __future__ import division, print_function
import numpy as np
from algorithm.estimator import Estimator
class SVDPlusPlus(Estimator):
"""
属性
---------
n_factors : 隐式因子数
n_epochs : 迭代次数
lr : 学习速率
reg : 正则因子
"""
def __init__(self, n_factors=20, n_epochs=20,