推荐系统之协同过滤矩阵分解

 

前言

推荐系统中有许多算法,本文主要讲解基于协同过滤的矩阵分解算法。

协同过滤

协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。

矩阵分解

这里主要介绍LFM模型。

假如有两张表,一张是物品的属性表。

内容是每个物品该性质的程度。

  性质1 性质2 性质3
物品1      
物品2      

一张是是用户对每一种物品的喜爱程度。

  性质1 性质2 性质3
用户1      
用户2      

显然,用户对每一种物品的喜爱程度为对应行每个元素相乘。

另一种想法是,用户——评分表是一个低秩矩阵,我们要把这个矩阵表示出来。

梯度下降

将矩阵分解可以直接使用SVG,但是该矩阵极其稀疏,而且极大,需要大量算力。

这里使用梯度下降法,最小化误差。

\[Cost=\sum_{u,i\in R}(r_{ui}-\hat r_{ui})^2\]

可以加入正则项防止过拟合。

实战练习

movielens下载10M数据。

该数据共71567名用户对10681电影的10000054条评分。

评分平均数3.51分,方差1.12分。

这里取矩阵大小为 $715672000$ 和 $106812000$ 。

训练集均方误差约0.12,测试集均方误差约0.67。