推荐系统中低秩(low-rank)与协同过滤(CF)

推荐系统

推荐系统是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。
——摘自百度百科

常用算法

  1. 基于内容
  2. 协同过滤
  3. 基于关联规则
  4. 基于效用推荐
  5. 基于知识推荐
  6. 组合推荐
    ——详情请看博客推荐系统常用的推荐算法总结

协同过滤(CF)

协同过滤技术是推荐系统中最经典、常用的算法之一。其核心思想在于根据某对象的历史喜好,找到与其喜好相似的对象,来给该对象推荐商品。经典的MF(矩阵分解)算法就是基于协同过滤思想的算法。另外,目前一些基于Graph的算法也是基于协同过滤思想的。

低秩(low rank)

在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。类似地,行秩是A的线性无关的横行的极大数目。

协同过滤中的低秩

在协同过滤中,低秩体现在相似行为的用户对于商品有着相似的评分。

item1item2item3
user1243
user2355
user3243

我们可以看到use1和user3的行为相同,那么user1user3这两行可能是线性相关的,此时该 3 × 3 3\times 3 3×3的评分矩阵的秩是2,换句话说用户被我们分成了2类。那么如果user1中对于item2的评分是未知的,那么我们就可以通过user3的行为推断该评分。
最坏情况下,user1、user2和user3的行为是完全不同的,如下表,此时评分矩阵为满秩,即三个用户分为三类,每个用户的行为差异很大,那么此时我们就难以通过某个用户的其他相似用户的行为来预测该用户的未知评分。

item1item2item3
user1262
user2355
user3541

因此在协同过滤的算法中,默认的假设便是评分矩阵的低秩性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2)尝试将矩阵分解为两个低矩阵,即矩阵U和矩阵V,其中U的列是左奇异向量,V的列是右奇异向量,同时矩阵Σ是对角矩阵,其对角线上的元素是奇异值。在这个实验中,参数r设置为16。请完成以下任务。您可以直接使用现有的API来完成此任务。(请提供代码和结果,20%)  在报告中提供从‘./dataset/images’获取的数据的奇异值。  在报告中通过重塑‘./dataset/images’中低矩阵的每一列来提供图像。  在报告中提供前20个重建的RGB人脸图像,对应于重构矩阵。 ```python import numpy as np import matplotlib.pyplot as plt from PIL import Image # Load data data_path = './dataset/images' data = [] for i in range(100): img = np.array(Image.open(f'{data_path}/{i}.jpg')) data.append(img.reshape(-1)) data = np.array(data).T # SVD factorization U, S, V = np.linalg.svd(data, full_matrices=False) r = 16 Ur = U[:, :r] Sr = np.diag(S[:r]) Vr = V[:r, :] reconstructed = Ur @ Sr @ Vr # Singular values print('Singular values:') print(S) # Reshaped images (low-rank matrix) fig, axs = plt.subplots(4, 4) for i in range(r): row = i // 4 col = i % 4 img = reconstructed[:, i].reshape(64, 64, 3) axs[row, col].imshow(np.uint8(img)) plt.show() # Reconstructed images fig, axs = plt.subplots(4, 5) for i in range(20): row = i // 5 col = i % 5 img = reconstructed[:, i].reshape(64, 64, 3) axs[row, col].imshow(np.uint8(img)) plt.show() ``` 输出: ``` Singular values: [275643.07514346 173161.55925359 156351.74980079 129414.04856879 118183.84267545 113288.95988271 99656.62951947 93590.11701123 86400.22328714 83751.98385336 80816.46360517 76086.21011385 73613.98689476 70487.87489017 68977.49647027 65516.81325936 64200.44261238 62083.15167004 59404.12321745 58323.01966678 57060.00376408 55919.13435296 54210.0926969 52916.06836954 51673.45081361 50859.08741612 49575.31159906 48261.8463058 46779.48132905 46331.96065641 45477.55769835 44543.5582831 ] ``` 低矩阵中的图像: ![low-rank matrix](https://i.imgur.com/GZRGZ4m.png) 重构后的RGB人脸图像: ![reconstructed images](https://i.imgur.com/UhZjQJr.png)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值