作者:Pytholabs

翻译:老齐

相关图书推荐:《跟老齐学Python:数据分析》

本书是数据科学、机器学习、深度学习等方向的入门读物,介绍了这些领域必用工具Numpy、Pandas和数据可视化方法,并且配有大量实例。


本文,我们将创建一个电影推荐系统。

原理:矩阵分解

矩阵分解是推荐系统系列中的一种算法,顾名思义,就是将矩阵分解成两个(或多个)矩阵,它们相乘后得到原始矩阵。在推荐系统中,我们通常从用户与项目之间的交互/评分矩阵开始,矩阵分解算法会将用户和项目特征矩阵分解,这也称为嵌入。下面以电影推荐中的评分,购买等矩阵为例。


通常,在数据集中,要挖掘用户和项目属性的潜在特征。本质上,潜在特征是用户/项目在任意空间中的表示,表示用户如何评价电影。在电影推荐系统的示例中,一个用户样本中包含了他所观看的多个电影,潜在特征的值越高,则表示他喜欢该类型的电影,那么就应该推荐此类型的电影。


准备

本文所用数据来自kaggle(https://www.kaggle.com/CooperUnion/anime-recommendations-database),包含了76000个用户样本。

首先,导入数据和有关库。

from recsys import * from generic_preprocessing import 

from IPython.display import HTML ## 以Ipython Notebook显示

import pandas as pd,numpy as np

anime = pd.read_csv('anime.csv')ratings = pd.read_csv('rating.csv').iloc[:5000000]

以上代码中的recsys模块来自:https://github.com/aayushmnit/cookbook/blob/master/recsys.py,generic_preprocessing模块来自:https://github.com/aayushmnit/cookbook/blob/master/generic_preprocessing.py

为了创建推荐系统,我们需要一个可交互的矩阵。为此,使用recsys模块中的create_interaction_matrix函数,这个函数要求以Pandas的DataFrame类型的数据为输入,输入数据的列必须有诸如用户id,项目id和评分等。此函数的中如果设置norm=True,则意味着任何评分的值都应该是正的。在这个示例中,没有必要设置,因为实际的购买数据和评分都是正的。

# 利用评分数据创建矩阵interactions = create_interaction_matrix(df = ratings,                     user_col = ‘user_id’,                     item_col = ‘anime_id’,                     rating_col = ‘rating’)interactions.shape

然后用create_user_dictcreate_item_dict函数(recsys模块)创建关于用户和项目的字典。

# 用户字典user_dict = create_user_dict(interactions=interactions)# 项目字典movies_dict = create_item_dict(df = anime,                               id_col = 'anime_id',                               name_col = 'name')

矩阵分解模型

recsys中的runMF函数来创建矩阵分解模型,这个函数的参数:

  • interaction:前面所创建的矩阵
  • n_components:对于每个用户和项目嵌入的数量
  • loss:定义一个损失函数,本例中我们使用warp损失函数(详见:https://making.lyst.com/lightfm/docs/examples/warp_loss.html),因为我们更关心矩阵的秩。
  • epoch:运行的次数
  • n_jobs:并行处理中使用的核数
mf_model = runMF(interactions = interactions,                 n_components = 30,                 loss = 'warp',                 epoch = 30,                 n_jobs = 4)

本系统的完整代码请参考:https://colab.research.google.com/drive/1qPA_t4O0KXHZY7fI8N69U5ikTDC9wpRy


原文链接:https://medium.com/@pytholabs/anime-recommendation-with-matrix-factorization-pytholabs-a59f7ed05516


专注于软件和AI的公众号

老齐教室


觉得好看,就点这里???

分解原理_基于矩阵分解原理的推荐系统相关推荐

  1. 基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统

    本文是对经典论文的阅读笔记,大部分为论文的中文翻译内容(笔者英语水平也就六级飘过的水准,不喜勿喷) 论文标题:Matrix factorization techniques for recommend ...

  2. 电影推荐系统 python简书_基于Spark的电影推荐系统(实战简介)

    ## 写在前面 一直不知道这个专栏该如何开始写,思来想去,还是暂时把自己对这个项目的一些想法 和大家分享 的形式来展现.有什么问题,欢迎大家一起留言讨论. 这个项目的源代码是在https://gith ...

  3. 基于矩阵分解的推荐系统

    基于矩阵分解的推荐算法 1.概述    基于用户和基于项的协同过滤推荐算法,难以实现大数据量下的实时推荐.这时我们可以使用基于模型的协同过滤算法,矩阵分解(Matrix Factorization,M ...

  4. numpy 矩阵 秩_大规模电商推荐数据分析-基于矩阵分解的召回

    前面两篇文章回顾了我们团队做天池数据比赛<CIKM 2019 EComm AI:用户行为预测>的复赛方案,现在让我们的目光回到初赛.初赛数据组织和复赛一样,只是数据量差异较大.(初赛才2G ...

  5. 协同过滤与隐语义模型推荐系统实例3: 基于矩阵分解(SVD)的推荐

    [ 协同过滤与隐语义模型推荐系统实例1: 数据处理 ] [ 协同过滤与隐语义模型推荐系统实例2: 基于相似度的推荐 ] 隐语义模型推荐 基于矩阵分解(SVD)的推荐 # 先计算歌曲被当前用户播放量/用 ...

  6. movielens推荐系统_基于内容推荐(二)

    A content-based movie recommender system using MovieLens tags (用标签构建一个简单的电影推荐系统) 现在有很多电影.如果没有某种推荐系统, ...

  7. 基于python 的电影推荐算法_基于python语言编程的矩阵分解电影推荐算法

    [实例简介]一种基于矩阵分解方法的电影推荐算法 [实例截图] [核心代码] import numpy as np from numba import cuda, float64, jit from s ...

  8. 基于深度学习的推荐系统

    作者|James Loy 编译|VK 来源|Towards Data Science 传统的推荐系统基于聚类.最近邻和矩阵分解等方法.然而,近年来,深度学习在从图像识别到自然语言处理等多个领域取得了巨 ...

  9. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

最新文章

  1. java message bus_【Microsoft Azure学习之旅】消息服务Service Bus的学习笔记及Demo示例...
  2. 第十五届全国大学生智能汽车竞赛竞速赛规则(讨论稿)
  3. ios 性能优化(一)
  4. Tinyhttpd的实现和一些基本问题的解决
  5. usleep延时0.毫秒_LabVIEW从0到1系列视频培训_第4讲全集_操作例程说明
  6. jQuery内置动画和多库共存
  7. screen常用命令以及screen恢复会话时出现There is no screen to be resumed matching
  8. activity 点击后传递数据给fragment_Fragment 新特性 : Fragment Result API 使用以及源码分析
  9. NodeJS React 开发环境搭建
  10. 导致大量kworker的原因_氨氮超标的几种原因及解决办法
  11. sudoku me_Java Sudoku解算器程序
  12. 分布式服务的幂等性设计,值得学习!
  13. 案例学习——网站高并发处理相关技术
  14. 凸优化第五章对偶 5.5最优性条件
  15. C语言如何打开shx文件,shx文件是什么 shx文件如何打开
  16. XAMPP的安装及配置使用教程
  17. 17、【易混淆概念集】第十一章1 项目风险 风险临界值 VS 风险承受力 风险管理流程 风险管理及变更流程 规划风险管理 识别风险
  18. VC操作excel(创建表格 查找 插入数据)
  19. java基础篇---第一天
  20. python 抓取网页数据

热门文章

  1. iOS8新特性 计算 cell 的高度
  2. 修改Hosts为何不生效,是DNS缓存?
  3. input 的read only 和 disable的区别
  4. ACL-文件访问控制列表
  5. SAP提请法院向甲骨文支付不超4亿美元赔偿金
  6. 如何在vc的拆分窗口中使用CFormView派生类
  7. weblogic 启动项目失败,JMS 队列通过http 方式访问
  8. 吃亏是福--创业[3]
  9. HTML中的map标签的使用
  10. 《CLR Via C# 第3版》笔记之(十) - 可选参数和可变数量参数