本文根据Andrew Ng的Machine Learning的课写就。算法
=======================================1、预测电影评分==========================================机器学习
全文以“预测电影评分”例子展开学习
r(i,j)=0则代表user_j没有对movie_i 没有评分,优化
推荐系统要作的就是经过预测user_j对这些movie {i|r(i,j)=0}的评分来给user_j 推荐其可能会喜欢的电影<预测评分较高的movie>spa
=======================================2、基于内容的推荐=======================================get
对每一个movie_i引入特征x(i)=(x1, x2),这种特征可能代表user对movie类型的偏好:浪漫or动做等io
对于每一个user引入一个参数theta,而后对评分矩阵的每列(对应一个user)作线性回归,数据是{ (x(i), y(i,j)) |r(i,j)=1,for some j all i}class
像机器学习同样,x(i)添加个1变量x(i)=(1, x1, x2)变量
那么对于未评分的movie_t,咱们可使用线性回归训练的参数theta与对应特征x(t)作内积来获得其预测评分
im
对每一个用户都训练一个参数theta_j,优化模型以下:
优化算法:注意正则项是不约束x(i)=(1, x1, x2)中1对应的参数theta的第一项theta0,因此k=0与k=1,2分别对待
=======================================3、协同过滤=======================================
如今换个角度:若是知道theta for all user j,如何来预测x(i) = (x1, x2) all i
仍然可使用线性回归,为训练每一个x(i),须要评分矩阵的第i行数据{ (x(i), y(i,j)) |r(i,j)=1,for some i all j}
theta_j = (0, theta1, theta2) ;theta1=5说明user_j喜欢romance类movie, theta2=5说明user_j喜欢action类movie,只能有一个等于5哦,
我以为也能够是:theta_j = (0, 4, 1) ;喜欢romance 4 action 1.
对应的优化:
协同过滤:交替优化theta与x
=========================================4、协同过滤算法=======================================
优化:
优化:注意去掉了theta和x的添加项
=========================================5、实现细节补充=======================================
实现细节:
若是有user没有对任何电影评分或者全部评分的电影都是0分,那么所学习到的参数是零向量,
则预测都是0值,这是不合理的。经过 将评分矩阵减去其行均值再进行线性回归来“避免”这种状况
=========================================6、一点思考==========================================