矩阵分解(Matrix Factorization)
矩阵分解基本原理
将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

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

895

被折叠的 条评论
为什么被折叠?



