python实现推荐系统矩阵分解(Matrix Factorization)提取特征向量


前言

矩阵分解是推荐系统中常用的方法,其目的是提取用户的特征向量,以及被打分推荐物品的特征向量。相当于一中embedding的方法,适用于用户极多,被推荐物体数量极大,导致的由于矩阵中存在较多空缺而无法进行推荐的情况。


一、Matrix Decomposition数学原理

在这里插入图片描述

R为原始矩阵,P和Q使我们要通过学习得到的矩阵,最终P*Q的结果即为我们对于R中空缺值填入后的结果。

在这里插入图片描述
加上正则化的LOSS损失函数表达式如上所示,r为原始矩阵的元素,β为正则化系数。在这里我们通过反向传播(Backward Propagation)进行学习,损失函数的偏导数如下。

在这里插入图片描述
α为学习率(learning rate),这里偏导数并不难求,通过对上面的损失函数手推即可退出。
得到损失函数以及偏导数后我们就可以编程实现了。

二、python实现

程序如下所示:

需要十分注意的是,该算法的核心就是用原始矩阵中真正有用户打分的元素的值,填充特征矩阵,生成预测矩阵。而非用预测矩阵逼近原始矩阵!!!所以必须通过判断原始矩阵在某处是否有值,若有值则通过该值进行梯度下降更新特征值矩阵,若没有则不更新(注意!)。由于numpy中没有只运算有值处元素的API,因此只能通过遍历进行。

**

实际应用中应注意

**

由于我用来提取轨迹中用户的特征因此原始矩阵较大,需要注意的矩阵越大,越要调低learning rate,否则可能出现不收敛的情况。

对于K的选取,K越低最低损失自然也是越大,由于存在大量空值,预测矩阵对这些空值进行了填值,因此评价损失还应该用原始矩阵中存在的值来进行。


import numpy as np
import matplotlib.pyplot as plt
import time

def LOSS(matrix1,matrix2):
    return sum(sum((matrix1-matrix2)**2))**0.5 

def gradiantdecentMD(matrix,K,learningrate,regularate,epoch):
    los=[
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值