mf模型 svd++_【MF】SVD

矩阵分解是推荐系统的主流思想之一,它的思想是把矩阵拆解为多个矩阵的乘积。

d33ecc7c536bb5d2f1f88bda5506f09d.png

矩阵分解有俩种方法,分别是 EVD(特征值分解) 和 SVD(奇异值分解),在推荐系统中许多矩阵是非对称的,而且不是方阵,所以通常在应用过程中采用SVD。

如图所示,我们可以认为A是uer/iterm矩阵,通过矩阵分解,我们可以得出User矩阵和Iterm矩阵。以及中间的元素是特征向量的对角矩阵。

dee8740f757e9d531ac0fba9b3138208.png

8f62273c208f8ee6d79e59825f0d2009.png

代码如图所示:

#EVD

importnumpy as np

A= np.array([[5,3],

[1,1]])

lamda, U=np.linalg.eig(A)print('矩阵A:')print(A)print('特征值:',lamda)print('特征向量')print(U)

#SVD

from scipy.linalg importsvdimportnumpy as npfrom scipy.linalg importsvd

A= np.array([[1,2],

[1,1],

[0,0]])

p,s,q= svd(A,full_matrices=False)print('P=', p)print('S=', s)print('Q=', q)

这么一倒腾,感觉也没什么作用。但是通过矩阵分解,我们可以使用较少特征值对矩阵A进行近似还原。

如图,如果我们想看user2对iterm3的评分,可以得到:

4=-0.46*16.47*(-0.29)+(-0.30)*6.21*(-0.38)+(-0.65)*4.40*(-0.13)+0.28*2.90*0.87+0.02*1.58*(-0.03)

04e23a727252312f1ebaa81c57c0c624.png

事实上,我们发现user的最后一列是没有用到的,我们可以把没有用到的行列抛掉,从而实现了数据的降维。甚至我们还可以使用更少的特征,去得到A的近似解。

66fd28bbe968397959c0739e6f6eceea.png

1def2155798ac16ed22a93a9046ea7e2.png

传统的SVD在推荐系统中的应用如下:

使用K的个特征向量对矩阵降维

从而将第i个用户对第j个物品的评分转化为行列式的求值,不仅可以进行并行计算,还节省了内存。

通常,完整的SVD可以将M无损的分解成三个矩阵,但是为了简化矩阵分解,还可以使用较少的K对矩阵A进行近似还原。

存在的使用局限:

SVD分解要求矩阵是稠密的,即矩阵都有元素,但是在实际业务过程中矩阵往往是稀疏的,存在大量缺失值。

如果我们要对缺失值进行补全,填充的方式一般简单粗暴,从而造成数据的噪音大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值