《现代推荐算法》矩阵分解系列简介

/关注公众号 长歌大腿,发送“机器学习”关键字,可获取包含机器学习(包含深度学习),统计概率,优化算法等系列文本与视频经典资料,如《ESL》《PRML》《MLAPP》等。/
文章来源《现代推荐算法》矩阵分解系列简介 .

该章主要介绍矩阵分解系列算法,该系列算法是推荐系统中最重要的算法之一,矩阵分解原理清晰,且复杂度不那么高。

对于矩阵分解系列算法在推荐算法中而言,其容易编程实现,实现复杂度低,预测效果也好,同时还能保持扩展性。这些都是它宝贵的优点。当然,矩阵分解方法有时候解释性还是没有基于概率的逻辑回归之类的推荐算法好,不过这也不影响它的流行程度。对于较为小型的推荐系统来说用矩阵分解应该是一个不错的选择。大型的话,则矩阵分解比起现在的流行的深度学习推荐算法的一些方法不占优势。

矩阵分解推荐算法简介

2009年举办了一个Netflix Prize比赛,发出的是一个评分预测的问题。就是每个用户给电影打了1-5分,然后让你去预测一个用户对一个电影会打多少分。这种只有“用户”+“评分”的两元素构型的打分矩阵,也称为“user-item矩阵”。在整个“user-item矩阵”中,因为实际情况及个人爱好等原因,其实大部分是“空状态”,“空状态”表示了“没有任何了解”,而没有“非空状态”的肯定是表示了人对电影打过分,而且分数范围1-5分的分数。所以,比赛其实规则很简单,整个比赛的目的就是去用“非空状态”与预测那些“空状态”,具体会被打多少分。

这个时候,这种“user-item矩阵”就是一种“向量/矩阵”形式的结构化数据了,以数据表形式存储和表达。那么一个严重的问题就出现了,针对于这种“结构化数据”,但是结构又非常简单,只有两个维度的特征,如何能够做推荐系统就成了关键,而且这种推荐要求原理简单而且使用效果好,包括数学理论知识扎实和计算复杂度的可接受性。

在Netflix Prize之前,类似问题很多方案都是把缺失的值都填上3分,类似于结构化数据特征预处理的缺失数据处理一样:离散数据用众数填充,连续数据用中位数填充,然后把user-item矩阵做SVD分解,选取最大的K个特征值对应的特征向量组成的矩阵,然后再乘起来。这个时候,那些确实的数据对都变成了其他的分数,这个分数就是预估值。但是这样可行的原因是数据集量不是那么大,但是当数据集到了几十万维的矩阵,这个时候SVD是不可行的,因为SVD分解是个O(n^3)的复杂度的算法。

SVD适用于稠密矩阵,计算复杂度高,只能适用于小型的低阶推荐系统。

FunkSVD 优化策略中使用了L2正则化,可以适用于稀疏矩阵,计算复杂度低,有防止过拟合得考虑。在FunkSVD上,加入了各项的偏置考虑,引出了BiasSVD。再引入用户反馈考虑,修改模型得到了SVD++算法。再加入时间权重衰减问题的考虑,得到了TimesSVD++的算法。

你可能感兴趣的:(《现代推荐算法》矩阵分解系列简介)