当前位置: 首页 > news >正文

【基于协同过滤算法的推荐系统项目实战-2】了解协同过滤推荐系统

本文目录

  • 1、推荐系统的关键元素
    • 1.1 数据
    • 1.2 算法
    • 1.3 业务领域
    • 1.4 展示信息
  • 2、推荐算法的主要分类
    • 2.1 基于关联规则的推荐算法
      • 基于Apriori的算法
      • 基于FP-Growth的算法
    • 2.2 基于内容的推荐算法
    • 2.3 基于协同过滤的推荐算法
  • 3、推荐系统常见的问题
    • 1、冷启动
    • 2、数据稀疏
    • 3、不断变化的用户喜好
  • 4、推荐系统效果评测
    • 4.2 模型离线实验
    • 4.2 用户A\B Test在线实验

1、推荐系统的关键元素

1.1 数据

数据是整个推荐系统的基石,我们需要对数据进行清洗和预处理。

用户行为能够真实的反映每个用户的偏好和习惯,其中的显示反馈数据会比较稀疏,隐式的反馈数据蕴含了大量的信息。
在这里插入图片描述
在这里插入图片描述

1.2 算法

基于流行度的推荐算法:是基于PV、UV来进行推荐,没有个性推荐。

基于协同过滤的推荐算法:是目前比较主流的一个推荐算法。

基于内容的推荐算法:是通过打标签进行推荐的,可以基于特征向量对内容自动打标签。(以前是人工打标签,现在可以自动打标签了)

基于模型的推荐算法:解决协同过滤算法的数据稀疏性的问题。

1.3 业务领域

不同的领域,不同的行业都会有自己的知识体系,所以泛化的一些推荐系统是无法满足具体领域中的特定的用户需求,所以需要结合知识去特定一些推荐系统。

例如在:
金融领域是基于风险偏好的个性化推荐方法。
社交领域是基于社交信息的用户行为挖掘方法。
电商领域是基于情境感知的个性化偏好的挖掘方法。

1.4 展示信息

可以理解为展示UI,也就是前端数据可视化,你需要把什么样的信息、哪些信息展示给用户,才能做到吸引,高质量的吸引是重要的, 不能过于繁杂,也不能过于少, 要精准。

2、推荐算法的主要分类

在这里插入图片描述

2.1 基于关联规则的推荐算法

应用场景:购物篮分析。
通过放入购物篮的不同商品之间的联系,分析顾客的购物习惯。

基于Apriori的算法

Aparior是无监督学习算法,挖掘一堆数据集中的数据之间的某种关联。但是会存在一些明显的缺点,如数据集很大的时候,运行效率很低。

假设有四种单品,那如果两两组合,那少于某个特定值的就会淘汰,这个特定值叫做 支持度。只有当支持度大于某个特定值的时候,才能认为是有效的。
在这里插入图片描述

基于FP-Growth的算法

FP-Growth不产生候选集。另外只需要扫描2次数据集,这是和Apriori最大的两个不同点。

2.2 基于内容的推荐算法

简而言之,就是推荐内容相似的物品。

通过打标签tag来找内容相似的物品,也可以通过文本相似度来找内容相似的物品。

通过自然语言挖掘:文本相似度是通过TF-IDF算法来完成的:提取关键词及其TFIDF值,将共同关键词的TFIDF的值的积并求和,然后获取相似度的值。

最后,也能通过分类算法来分类。
在这里插入图片描述

2.3 基于协同过滤的推荐算法

在这里插入图片描述
基于用户的协同过滤:是指兴趣相近的用户会对同样的物品感兴趣。
基于物品的协同过滤:是指推荐给用户他们喜欢的物品相似的物品。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
协同过滤是为了解决数据稀疏,为此我们进行特征分解,把评分矩阵不全,进行降维。通过奇异值分解来进行特征分解,提出了SVD,但是SVD过于复杂,又提出了PMF。

3、推荐系统常见的问题

1、冷启动

在这里插入图片描述
根据用户注册信息对用户进行分类,如手机号运营商、邮箱等等可以适当解决用户冷启动。

也可以通过推荐热门的排行榜、基于深度学习的语义模型理解来解决。

所以需要引导用户把自己的属性表达起来。

对于物品冷启动,则需要通过文本分析、主题模型、给物品打标签、排行榜单等来做到。

2、数据稀疏

用户-物品矩阵是稀疏矩阵。其解决方案如下:
在这里插入图片描述
但降低维度也会有一定丢失属性。

3、不断变化的用户喜好

需要对用户行为的存储有实时性,另外推荐算法要考虑到用户近期行为和长期行为,并且不断的挖掘用户新的兴趣爱好。

4、推荐系统效果评测

4.2 模型离线实验

1、模型离线实验:将数据集分为训练数据和测试数据集。在训练集上训练推荐模型,在测试集上进行预测。最后通过预定的指标来评测测试集上的预测结果。
在这里插入图片描述
模型离线实验是推荐系统中的一个基石,路径短,方便完成闭环以此来完成快速迭代,同时不会影响线上的用户体验。
最大的优点就是无需真实的用户参与。

但最大的缺点也是没有用户数据集真实,无法获得真实的用户关心指标。

4.2 用户A\B Test在线实验

在这里插入图片描述
在这里插入图片描述

相关文章:

【基于协同过滤算法的推荐系统项目实战-2】了解协同过滤推荐系统

本文目录1、推荐系统的关键元素1.1 数据1.2 算法1.3 业务领域1.4 展示信息2、推荐算法的主要分类2.1 基于关联规则的推荐算法基于Apriori的算法基于FP-Growth的算法2.2 基于内容的推荐算法2.3 基于协同过滤的推荐算法3、推荐系统常见的问题1、冷启动2、数据稀疏3、不断变化的用…...

线程安全(重点)

文章目录一.线程安全的概念1.1 线程安全的概念1.2 线程不安全的原因1.3 解决线程不安全二.synchronized-monitor lock(监视器锁)2.1 synchronized的特性(1)互斥(2)刷新内存(3)可重入2.2 synchronied使用方法1.直接修饰普通方法:2.修饰静态方法:3.修饰代码块:三.死锁3.1死锁的情…...

软件测试面试找工作你必须知道的面试技巧(帮助超过100人成功通过面试)

目录 问题一:“请你自我介绍一下” 问题二:“谈谈你的家庭情况” 问题三:“你有什么业余爱好?” 问题四:“你最崇拜谁?” 问题五:“你的座右铭是什么?” 问题六:“谈谈你的缺点” 问题七&#xff…...

Python快速入门:类、文件操作、正则表达式

类、文件操作、正则表达式1. 类2. 文件操作3. 正则表达式1. 类 类是用来描述具有相同的属性和方法的集合,定义了该集合中每个对象共有的属性和方法,对象是类的实例,可以调用类的方法。 定义类时,如有父类,则写在类名…...

java-day01

程序就是有序指令的集合 cmd执行java程序,javac Test.java,java Test java技术平台: javaSE标准版,javaEE企业版,javaME小型版 java语言面向对象的(oop),java跨平台性的(…...

玩转 Node.js 集群

一、介绍 Node 在 v0.8 时直接引入了 cluster 模块,用以解决多核 CPU 的利用率问题,同时也提供了较完善的 API,用以处理进程的健壮性问题。 cluster 模块调用 fork 方法来创建子进程,该方法与 child_process 中的 fork 是同一个…...

Day909.MySQL 不同的自增 id 达到上限以后的行为 -MySQL实战

MySQL 不同的自增 id 达到上限以后的行为 Hi,我是阿昌,今天学习记录的是关于MySQL 不同的自增 id 达到上限以后的行为的内容。 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。 虽然自然数是没有…...

JVM学习.01 内存模型

1、前言对于C、C程序员来说,在内存管理领域,他们拥有对象的“所有权”。从对象建立到内存分配,不仅需要照顾到对象的生,还得照顾到对象的消亡。背负着每个对象生命开始到结束的维护和管理责任。对于JAVA程序来说,因为J…...

R+VIC模型应用及未来气候变化模型预测

RVIC模型融合实践技术应用及未来气候变化模型预测在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用。目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然&…...

搞懂vue 的 render 函数, 并使用

render函数是什么 简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM 因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode(虚拟节点)的函数,而用render函数构建DOM,vu…...

【Linux】GDB的安装与使用

安装安装gdb的具体步骤如下:1、查看当前gdb安装情况rpm -qa | grep gdb如果有,则可以先删除:rpm -e --nodeps 文件名如果没有,则进行下一步。2、下载gdb源码包或者直接apt安装。apt命令安装:sudo apt install gdb源码包…...

MySQL索引特性

文章目录为什么要有索引?认识磁盘磁盘的结构磁盘的盘片结构定位扇区磁盘随机访问 (Random Access)与连续访问 (Sequential Access)MySQL与磁盘交互索引的理解测试主键索引索引的原理索引结构是否可以使用其他数据结构B树 vs B树聚簇索引 vs 非聚簇索引为什么要有索引…...

Python 面向对象编程——类定义与对象

<类定义与对象声明> 面向对象最重要的概念就是类&#xff08;Class&#xff09;和实例&#xff08;Instance&#xff09;&#xff0c;必须牢记类是抽象的模板&#xff0c;比如Student类&#xff0c;而实例是根据类创建出来的一个个具体的“对象”&#xff0c;每个对象都拥…...

基于 Apache Flink 的实时计算数据流业务引擎在京东零售的实践和落地

摘要&#xff1a;本文整理自京东零售-技术研发与数据中心张颖&闫莉刚在 ApacheCon Asia 2022 的分享。内容主要包括五个方面&#xff1a; 京东零售实时计算的现状实时计算框架场景优化&#xff1a;TopN场景优化&#xff1a;动线分析场景优化&#xff1a;FLINK 一站式机器学…...

【JavaEE】如何将JavaWeb项目部署到Linux云服务器?

写在前面 大家好&#xff0c;我是黄小黄。不久前&#xff0c;我们基于 servlet 和 jdbc 完善了博客系统。本文将以该系统为例&#xff0c;演示如何将博客系统部署到 Linux 云服务器。 博客系统传送门&#xff1a; 【JavaEE】前后端分离实现博客系统&#xff08;页面构建&#…...

Mysql常用命令

mysql连接&#xff1a; [roothost]# mysql -u root -p Enter password:******创建数据库&#xff1a; CREATE DATABASE 数据库名&#xff1b; 删除数据库&#xff1a; drop database 数据库名; 使用mysqladmin删除数据库&#xff1a; [roothost]# mysqladmin -u root -p dr…...

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(4)

目录 写在前面&#xff1a; 题目&#xff1a;P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; …...

在Win10以及SDK为33的环境下——小米便签项目的搭建

文章目录0. 我的操作系统和开发环境1. 相关文件下载&#xff1a;2. import project&#xff1a;2.1 用import project导入项目3. make project&#xff1a;3.1 AS中的命令行乱码问题:3.2 依赖库缺失问题:3.3 关于targetSdkVersion3.4 关于Missing URL3.5 关于Manifest merger f…...

FPGA纯verilog实现RIFFA的PCIE通信,提供工程源码和软件驱动

目录1、前言2、RIFFA简介RIFFA概述RIFFA架构RIFFA驱动3、vivado工程详解4、上板调试验证并演示5、福利&#xff1a;工程代码的获取1、前言 PCIE是目前速率很高的外部板卡与CPU通信的方案之一&#xff0c;广泛应用于电脑主板与外部板卡的通讯&#xff0c;PCIE协议极其复杂&…...

Linux网络配置

文章目录一、Linux网络配置原理图二、查看网络IP和网关ping测试主机之间网络连通性三、linux网络环境配置第一种方法(自动获取)第二种方法(指定ip)四、设置主机名和hosts映射设置主机名设置hosts映射五、主机名解析过程分析(Hosts、DNS)Hosts是什么DNS一、Linux网络配置原理图 …...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...