推荐系统之矩阵分解MF原理及Python实现

本文详细介绍了矩阵分解的基本原理,包括将共现矩阵分解为用户矩阵和物品矩阵,并通过Python代码展示了矩阵分解的过程。文章还提供了数据处理、矩阵生成、训练及评估推荐算法的完整流程,适用于推荐系统的开发和研究。

矩阵分解基本原理

将mn维的共现矩阵R分解为mk维的用户矩阵U和k*n维的物品矩阵V相乘的形式。其中m是用户数量,n是物品数量,k是隐向量维度。k的大小决定了隐向量表达能力的强弱。k取值越小,隐向量的表达能力就越弱;反之,k取值越大,隐向量表达能力越强
实例:
在这里插入图片描述
基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分为:
r ^ u i = q i T p u \hat{r}_{ui}=q_{i}^{T}p_{u} r^ui=qiTpu
参数说明:
qi:物品i的隐向量
pu:用户u的隐向量

用户矩阵U与物品矩阵V求解

在这里插入图片描述

矩阵分解详解好文

这是一篇讲解矩阵分解非常详细的博文,放在这里,便于日后自己多读几遍,全面深入理解矩阵分解算法
基于矩阵分解的推荐算法

实现矩阵分解Python代码

程序亲测有效,程序中附有详细说明

import numpy as np
import pandas as pd
import os
import time
import math


'''
说明: 使用的数据集 MovieLens 100K
数据集下载地址: https://grouplens.org/datasets/movielens/100k/
'''


'''
参数说明:
    R:用户-物品对应的共现矩阵 m*n
    P:用户因子矩阵 m*k
    Q:物品因子矩阵 k*n
    K:隐向量的维度 
    steps:最大迭代次数
    alpha:学习率
    Lambda:L2正则化的权重系数
'''


# 将矩阵R分解成P,Q
def matrix_factorization(R, P, Q, K, steps, alpha=0.05, Lambda=0.002):
    # 总时长
    sum_st = 0
    # 前一次的损失大小
    e_old = 0
    # 程序结束的标识
    flag = 1
    # 梯度下降结束条件1:满足最大迭代次数
    for step in range(steps):
        # 每次跌代开始的时间
        st = time.time()
        cnt = 0
        e_new = 0
        for u in range(1, len(R)):
            for i in range(1, len(R[u])):
                if R[u][i] > 0:
                    eui = R[u][i] - np.dot(P[u, :], Q[:, i])
                    for k in range(K):
                        temp = P[u][k]
                        P[u][k] = P[u][k] + alpha * eui * Q[k][i] - Lambda * P[u][k]
                        Q[k][i] = Q[k][i] + alpha * eui * temp - Lambda * Q[k][i
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值