二,潜在因子-音乐矩阵P,表示每种音乐含有各种元素的成分,比如下表中,音乐A是一个偏小清新的音乐,含有小清新这个Latent Factor的成分是0.9,重口味的成分是0.1,优雅的成分是0.2……
利用这两个矩阵,我们能得出张三对音乐A的喜欢程度是:张三对小清新的偏好音乐A含有小清新的成分+对重口味的偏好音乐A含有重口味的成分+对优雅的偏好音乐A含有优雅的成分+……
即:0.60.9+0.80.1+0.10.2+0.10.4+0.70=0.69
每个用户对每首歌都这样计算可以得到不同用户对不同歌曲的评分矩阵R~\widetilde{R}R。(注,这里的破浪线表示的是估计的评分,接下来我们还会用到不带波浪线的RRR表示实际的评分):
因此我们队张三推荐四首歌中得分最高的B,对李四推荐得分最高的C,王五推荐B。
如果用矩阵表示即为:
R~=QPT\widetilde{R}=QP^TR=QPT
我们所说的“潜在因子”指的就是以上例子中的QQQ和PTP^TPT矩阵,那么
下面问题来了,以上的潜在因子(latent factor)是怎么得到的呢?由于面对海量的让用户自己给音乐分类并告诉我们自己的偏好系数显然是不现实的,事实上我们能获得的数据只有用户行为数据。我们沿用 @邰原朗的量化标准:单曲循环=5, 分享=4, 收藏=3, 主动播放=2 , 听完=1, 跳过=-2 , 拉黑=-5,在分析时能获得的实际评分矩阵R,也就是输入矩阵大概是这个样子:
事实上这是个非常非常稀疏的矩阵,因为大部分用户只听过全部音乐中很少一部分。如何利用这个矩阵去找潜在因子呢?这里主要应用到的是矩阵的UV分解(即将矩阵RRR通过矩阵UV分解分解成矩阵QQQ、PTP^TPT的矩阵乘积,这里QQQ、PTP^TPT的乘积记为R~\widetilde{R}R只是矩阵RRR的近似)。也就是将上面的评分矩阵分解为两个低维度的矩阵,用Q和P两个矩阵的乘积去估计实际的评分矩阵,而且我们希望估计的评分矩阵R~\widetilde{R}R
和实际的评分矩阵不要相差太多(指的是与矩阵RRR非缺失值部分值接近),也就是求解下面的目标函数:
这里涉及到最优化理论,在实际应用中,往往还要在后面加上2范数的罚项,然后利用梯度下降法就可以求得这P,Q两个矩阵的估计值。这里我们就不展开说了。例如我们上面给出的那个例子可以分解成为这样两个矩阵:
这两个矩阵相乘就可以得到估计的得分矩阵:
将用户已经听过的音乐剔除后,选择分数最高音乐的推荐给用户即可(红体字)。
在这个例子里面用户7和用户8有强的相似性:
从推荐的结果来看,正好推荐的是对方评分较高的音乐: