前言
推荐系统中有许多算法,本文主要讲解基于协同过滤的矩阵分解算法。
协同过滤
协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。
矩阵分解
这里主要介绍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。
下篇开学祭