对于协同过滤算法我自己的一些总结和看法
文章目录
- 协同过滤算法的基本原理
- 协同过滤算法的分类
- 用户相似度计算
- UserCF && ItemCF
- 应用场景
- 协同过滤算法的优缺点
- 优点
- 缺点
- 协同过滤算法的总结与展望
- Q&A
协同过滤算法的基本原理
- 关于协同过滤算法,我看过很多老师写的博客以及一些简单的教程,我这里自己也总结了一些(建议大家去阅读王喆老师的深度学习推荐系统)。对于简单的推荐业务,协同过滤算法是必不可少的,也是新人学习推荐算法里绕不开的一个经典之作。
- 协同过滤的核心思想就是对用户历史行为进行处理和挖掘,从而找到用户的喜好,并通过用户所喜好的内容进行召回、推荐(类似于猜你喜欢,购买相同商品的人又购买了哪些,听过相同音乐的人还喜欢听哪些)。
协同过滤算法的分类
- 协同过滤算法可以大致分为两种类型:
- 基于邻域的协同过滤算法
- 基于用户的协同过滤算法(UserCF)
- 基于内容的协同过滤算法(ItemCF)
- 基于模型的协同过滤算法
- 基于矩阵分解算法
- 基于图模型算法
- 基于邻域的协同过滤算法
用户相似度计算
-
用户相似度计算就是在共现矩阵中,每个用户对应的行向量其实就可以当作一个用户的 Embedding向量,然后对这些Embedding进行相似度计算。用户相似度计算是最关键的步骤,在我推荐算法一栏中也介绍了几种用户相似度计算得算法以及相关代码。这里我就简单总结一下几个常用的。
- 欧氏距离
- 余弦相似度
- 修正余弦相似度
- 皮尔逊相关系数
- Jaccard相似系数
-
当然业界还有一些升级之后的用户相似度计算的算法阿里的WBcosine(协同过滤etrec),Swing等,这里就不做过多的介绍了。
UserCF && ItemCF
-
基于用户的协同过滤(User-Based Collaborative Filtering)通过分析用户之间的相似性来实现推荐。简单来说,就是根据用户的历史行为(比如浏览、购买、评分等)来找到与其兴趣相似的其他用户,然后向该用户推荐这些相似用户喜欢的商品或内容。
-
Q:UserCF真的就那么好用吗?
-
A:1.其实在典型的互联网电商环境下,往往用户数远大于物品书,而再最后计算Topn的相似用户,对于该用户的相似矩阵存储开销就会非常巨大,而随着时间的推移与业务量的发展,用户相似矩阵的以n^2的形式增长。
2. 对于用户历史数据往往向量是比较稀疏,简单的说就是用户点击和购买次数非常少,找到相似用户的准确度是比较低的,同样也不适用于UserCF。 -
基于内容的协同过滤(Item-Based Collaborative Filtering)与基于用户的协同过滤类似,但是其推荐的对象不是与目标用户相似的其他用户,而是与该用户曾经感兴趣的内容相似的其他内容。
应用场景
- UserCF是基于用户相似度进行推荐,具有比较强大的社交属性,用户能快速得知与自己相似兴趣的人最近又关注了哪些,即使某些内容曾经并不感兴趣,但是通过朋友的推荐点击,也会动态更新在自己的推荐列表中(类似于抖音朋友推荐了xxx视频),应用场景:新闻热点类。
- ItemCF更用于兴趣变化比较稳定的应用,比如一个用户在某个时间段内比较关注篮球鞋,这时候根据物品相似度就会推荐球衣或者体育器材等商品。应用场景:电商购物网站,音乐推荐,电影推荐。
协同过滤算法的优缺点
优点
- 个性化推荐
- 没有约束条件
- 灵活性高
- 可扩展性好
- 算法效果好
缺点
- 稀疏性问题
- 冷启动问题
- 数据稳定性问题
- 算法适用性问题
协同过滤算法的总结与展望
- 协同过滤是个比较直观且解释性较强的一类模型算法,但是没有较强的泛化能力,也就是两两物品的相似性无法推广到其他商品相似度计算中,这样就会存在一个很严重的问题,就是对于近期具有头部热门商品,容易跟大量物品产生相似性,而尾部的稀疏向量就无法与其他物品产生相似性计算而减少对其的推荐。总结一下来说,推荐结果头部效应比较明显,但处理稀疏向量能力弱。
- 对于解决此类问题,我们可以引用矩阵分解技术来增强模型的泛化能力,在协同过滤共现矩阵的基础上,添加用户与物品之间稠密的隐向量,从而挖掘隐含特征,来解决稀疏性问题。
Q&A
- Q:对于日增大量商品,文章,电影(十万,百万级别)的情况下,如何考虑相似度计算?
- A:在每天新增大量物品的情况下,一次性对所有物品进行相似度计算可能会非常耗时和占用大量的计算资源。为了提高计算效率,可以考虑以下几种方法:
-
- 增量计算:只对每天新增的商品与以往商品进行相似度计算。
-
- 分布式计算:使用Hadoop Spark大数据框架进行分布式计算,将商品数据分割成多个分区,利用服务器并行计算各个分区之间的相似度,最后再合并结果。
-
- 近似相似度计算:在实际应用中,并不需要精确的相似度计算。可以考虑使用一些近似相似度计算的方法(如LSH、MinHash等),通过降低计算复杂度来快速估计文章之间的相似度。
-
相关文章:
对于协同过滤算法我自己的一些总结和看法
文章目录 协同过滤算法的基本原理协同过滤算法的分类用户相似度计算UserCF && ItemCF应用场景 协同过滤算法的优缺点优点缺点 协同过滤算法的总结与展望Q&A 协同过滤算法的基本原理 关于协同过滤算法,我看过很多老师写的博客以及一些简单的教程&#x…...
数据库管理phpmyadmin
子任务1-PHPmyadmin软件的使用 本子任务讲解phpmyadmin的介绍和使用操作。 训练目标 1、掌握PHPmyadmin软件的使用方法。 步骤1 phpMyAdmin 介绍 phpmyadmin是一个用PHP编写的软件工具,可以通过web方式控制和操作MySQL数据库。通过phpMyAdmin可以完全对数据库进行…...
Oracle数据表ID自增操作
一、Oracle ID自增长功能介绍 Oracle数据库默认不支持像 SQLServer、MySQL中的自增长(auto increment)功能,即自动为每一行记录的自增长字段生成下一个值。 二、Oracle ID自增长方法 第一种,通过序列(sequence&#…...
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher
当使用npm下载vue3-lazy时出现一下错误时的解决方案 报错:npm WARN deprecated uuid3.4.0: Please upgrade to version 7 or higher 尝试使用过一下命令更新 npm install uuidlatest -g 是安装了最新版本的uuid, 再次下载已解决问题 ***但看某些播客依…...
第2节、让电机转起来【51单片机+L298N步进电机系列教程】
↑↑↑点击上方【目录】,查看本系列全部文章 摘要:本节介绍用简单的方式,让步进电机转起来。其目的之一是对电机转动有直观的感受,二是熟悉整个开发流程。本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分&#…...
1154: 第多少天
题目描述 定义一个包括年、月、日的结构体变量,读入年、月、日,计算该日在当年中是第几天。注意闰年问题。 输入描述 三个整数,分别表示年、月、日。保证输入是实际存在的日期,且年份在1000至3000之间(包含1000和30…...
【C语言初阶-const作用详解】const修饰变量、const修饰指针(图文详解版)
少年,做你认为对的事 目录 少年,做你认为对的事 1.const修饰变量 2.const修饰指针(重要) 代码1: 代码2: 代码3: 编辑 3.结论 1.const修饰变量 const修饰变量将变量赋予了常量属性…...
线程协作工具类【CountDownLatch倒数门闩、Semaphore信号量、CyclicBarrier循环栏栅、Condition接口】
线程协作工具类 CountDownLatch倒数门闩Semaphore信号量CyclicBarrier循环栅栏CyclicBarrier和CountDownLatch区别: Condition接口(条件对象) 转自 极客时间 线程协作工具类就是帮助程序员更容易的让线程之间进行协作,来完成某个业务功能。 CountDownLatch倒数门闩…...
Python 函数式编程进阶:map、filter、reduce
Python 函数式编程进阶:map、filter、reduce 介绍map 函数作用和语法使用 map 函数Lambda 函数的配合应用 filter 函数作用和语法使用 filter 函数Lambda 函数的结合运用 reduce 函数作用和语法使用 reduce 函数典型应用场景 介绍 在函数式编程中,map、…...
大模型|基础_word2vec
文章目录 Word2Vec词袋模型CBOW Continuous Bag-of-WordsContinuous Skip-Gram存在的问题解决方案 其他技巧 Word2Vec 将词转化为向量后,会发现king和queen的差别与man和woman的差别是类似的,而在几何空间上,这样的差别将会以平行的关系进行表…...
14.2 url后端过滤器(❤❤)
14.2 过滤器 1. 过滤器Filter1.1 配置形式实现过滤器1.2 过滤器生命周期1.3 过滤器特性(面试点)1.4 注解形式实现过滤器1.5 两种实现的选择2. 应用2.1 字符集过滤:统一设置请求与响应字节编码1. 配置方式实现过滤器参数化:init-param标签关键代码完整代码2. 注解方式实现2.2 多…...
Leetcode 377 组合总和 Ⅳ
题意理解: 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 这道题目和凑零钱是一样的,需要求使用指定元素(纸币…...
CleanMyMacX4.14.6如何清理mac垃圾内存
一直以来,苹果电脑的运行流畅度都很好,但是垃圾内存多了磁盘空间慢慢变少,还是会造成卡顿的。这篇文章就告诉大家电脑如何清理垃圾内存,电脑如何清理磁盘空间。 一、电脑如何清理垃圾内存 垃圾内存指的是各种缓存文件和系统垃圾…...
Java 学习和实践笔记(1)
2024年,决定好好学习计算机语言Java. B站上选了这个课程:【整整300集】浙大大佬160小时讲完的Java教程(学习路线Java笔记)零基础,就从今天开始学吧。 在这些语言中,C语言是最基础的语言,绝大多…...
【自然语言处理-工具篇】spaCy<1>--介绍及安装指南
目录 前言 安装指南 pip conda spaCy升级 总结 前言 spaCy是一个开源的自然语言处理库,用于处理和分析文本数据。它提供了许多功能,包括分词、词性标注...
LeetCode树总结
144. 二叉树的前序遍历 递归写法很简单,不再赘述。迭代写法需要用到一个栈,因为是根->左子树->右子树的顺序进行遍历,所以弹出当前结点后要先入栈右儿子,再入栈左儿子。 /*** Definition for a binary tree n…...
AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起
今天分享的是AI 系列深度研究报告:《AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起》。 (报告出品方:AVIC) 报告共计:36页 行业概览:2023年呈稳…...
Netty源码系列 之 EventLoop run()方法 源码
EventLoop[实现类为NioEventLoop,我们研究NioEventLoop即可] EventLoop是一个单线程的线程池 核心作用:处理执行IO操作(accept,read,write事件),普通任务,定时任务 EventLoop封装…...
ChatGPT 4.0 升级指南, ChatGPT Plus(GPT 4.0) 有何优势?
1.ChatGPT 是什么? ChatGPT 是由 OpenAI 开发的一种基于人工智能的聊天机器人,它基于强大的语言处理模型 GPT(Generative Pre-trained Transformer)构建。它能够理解人类语言,可以为我们解决实际的问题。 ChatGPT 4.…...
springboot157基于springboot的线上辅导班系统的开发与设计
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
