矩阵分解(MF)算法代码实现

本文介绍了一种基于矩阵分解的推荐系统算法,通过迭代更新用户-物品评分矩阵的近似分解来预测用户对未评分物品的兴趣。算法在每次迭代中同时更新用户矩阵P和物品矩阵Q,并在满足一定迭代次数或损失函数低于阈值时停止迭代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 #迭代退出既控制次数又控制条件如果在迭代过程中能够提前退出就提前退出

参数调整是最大问题

import numpy as np
#迭代退出既控制次数又控制条件如果在迭代过程中能够提前退出就提前退出
def MF(R,P,Q,K,steps,alpha,beta):
    m, n = R.shape
    for step in range(steps):
        for i in range(m):
            for j in range(n):
                if R[i][j]:
                    eij = R[i][j] - np.dot(P[i,:],Q[:,j])#内积运算
                    for k in range(K):
                        P[i][k] += alpha * (2 * eij * Q[k][j] - beta * P[i][k])
                        Q[k][j] += alpha * (2 * eij * P[i][k] - beta * Q[k][j])
        #所有的变量更新一遍之后判断一下损失函数是否满足退出条件
        loss = 0
        for i in range(m):
            for j in range(n):
                if R[i][j]:
                    eij = R[i][j] - np.dot(P[i, :], Q[:, j])
                    loss += pow(eij,2)
                    for k in range(K):
                        loss += (beta / 2) * (pow(P[i][k],2)+pow(Q[k,j],2))
        if loss < 1.1 :
            return P,Q
if __name__ == '__main__':
    R = np.array([ [5, 3, 0, 1],
                   [4, 0, 0, 1],
                   [1, 0, 0, 4],
                   [0, 1, 5, 4],
                   [0, 1, 5, 4]])
    k = 5
    m, n = R.shape
    P = np.random.rand(m,k)#初始化 随便赋值就ok
    Q = np.random.rand(k,n)
    new_P,new_Q = MF(R,P,Q,k,2000000,0.0002,0.02)
    new_R = np.matmul(new_P,new_Q)
    print(new_P)
    print(new_Q)
    print(R)
    print(new_R)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值