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

对于协同过滤算法我自己的一些总结和看法

文章目录

    • 协同过滤算法的基本原理
    • 协同过滤算法的分类
    • 用户相似度计算
    • 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更用于兴趣变化比较稳定的应用,比如一个用户在某个时间段内比较关注篮球鞋,这时候根据物品相似度就会推荐球衣或者体育器材等商品。应用场景:电商购物网站,音乐推荐,电影推荐。

协同过滤算法的优缺点

优点

  1. 个性化推荐
  2. 没有约束条件
  3. 灵活性高
  4. 可扩展性好
  5. 算法效果好

缺点

  1. 稀疏性问题
  2. 冷启动问题
  3. 数据稳定性问题
  4. 算法适用性问题

协同过滤算法的总结与展望

  • 协同过滤是个比较直观且解释性较强的一类模型算法,但是没有较强的泛化能力,也就是两两物品的相似性无法推广到其他商品相似度计算中,这样就会存在一个很严重的问题,就是对于近期具有头部热门商品,容易跟大量物品产生相似性,而尾部的稀疏向量就无法与其他物品产生相似性计算而减少对其的推荐。总结一下来说,推荐结果头部效应比较明显,但处理稀疏向量能力弱。
  • 对于解决此类问题,我们可以引用矩阵分解技术来增强模型的泛化能力,在协同过滤共现矩阵的基础上,添加用户与物品之间稠密的隐向量,从而挖掘隐含特征,来解决稀疏性问题。

Q&A

  • Q:对于日增大量商品,文章,电影(十万,百万级别)的情况下,如何考虑相似度计算?
  • A:在每天新增大量物品的情况下,一次性对所有物品进行相似度计算可能会非常耗时和占用大量的计算资源。为了提高计算效率,可以考虑以下几种方法:
      1. 增量计算:只对每天新增的商品与以往商品进行相似度计算。
      1. 分布式计算:使用Hadoop Spark大数据框架进行分布式计算,将商品数据分割成多个分区,利用服务器并行计算各个分区之间的相似度,最后再合并结果。
      1. 近似相似度计算:在实际应用中,并不需要精确的相似度计算。可以考虑使用一些近似相似度计算的方法(如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 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

微服务通信安全:深入解析mTLS的原理与实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...