【自学笔记】推荐系统

文章目录

  • 引入
    • 一些记号
    • 原理
  • 协同过滤算法
    • 使用
    • 均值归一化
  • 基于内容的推荐
    • 原理
    • 基于TensorFlow的代码
  • 从大目录里推荐
    • 检索
    • 排名

引入

在这里插入图片描述

一些记号

记号含义其他
n n n总人数
m m m总样本数
k k k特征数
y i ( j ) y_{i}^{(j)} yi(j) j j j个人对第 i i i个样本的评分 y i , j ∈ [ 0 , 1 ] y_{i,j} \in [0,1] yi,j[0,1],若未评分则为 n o n e none none
x ( i ) x^{(i)} x(i) i i i个样本的特征向量
w ( j ) w^{(j)} w(j), b ( j ) b^{(j)} b(j) j j j个人的超参数
λ \lambda λ正则化参数

原理

  用已有的样本集拟合第 j j j个人的兴趣曲线 f ( j ) ( x ) = w ( j ) ⋅ x + b ( j ) f^{(j)}(x) = w^{(j)}\cdot x + b^{(j)} f(j)(x)=w(j)x+b(j)
  第 j j j个人的损失函数为:

J ( w ( j ) , b ( j ) ) = 1 2 ∑ i : y i ( j ) ≠ n o n e ( f ( j ) ( x ( i ) ) − y i ( j ) ) 2 + λ 2 ∣ ∣ w ( j ) ∣ ∣ J(w^{(j)},b^{(j)})=\frac{1}{2}\sum_{i: y_{i}^{(j)} ≠ none}(f^{(j)}(x^{(i)})-y_{i}^{(j)})^{2}+\frac{\lambda}{2}||w^{(j)}|| J(w(j),b(j))=21i:yi(j)=none(f(j)(x(i))yi(j))2+2λ∣∣w(j)∣∣,其中 ∣ ∣ ⋅ ∣ ∣ ||\cdot|| ∣∣∣∣为某范数

  我们可以将 n n n个人统一起来一起拟合出总损失函数:

J ( w ( 1 ) w ( 2 ) . . . w n b ( 1 ) b ( 2 ) . . . b n ) = ∑ j = 1 n J ( w ( j ) , b ( j ) ) = ∑ j = 1 n ( 1 2 ∑ i : y i ( j ) ≠ n o n e ( w ( j ) ⋅ x ( i ) + b ( j ) − y i ( j ) ) 2 + λ 2 ∣ ∣ w ( j ) ∣ ∣ ) J\begin{pmatrix} w^{(1)} & w^{(2)} & ... & w^{n}\\ b^{(1)} & b^{(2)} & ... & b^{n}\end{pmatrix} =\sum_{j=1}^{n}J(w^{(j)},b^{(j)})=\sum_{j=1}^{n}(\frac{1}{2}\sum_{i: y_{i}^{(j)} ≠ none}(w^{(j)}\cdot x^{(i)}+b^{(j)}-y_{i}^{(j)})^{2}+\frac{\lambda}{2}||w^{(j)}||) J(w(1)b(1)w(2)b(2)......wnbn)=j=1nJ(w(j),b(j))=j=1n(21i:yi(j)=none(w(j)x(i)+b(j)yi(j))2+2λ∣∣w(j)∣∣)

  最后,用梯度下降等方法使损失函数最小化,得到 w w w b b b

  注意,该算法假设了我们知道每一个样本的所有特征 x i x_{i} xi

协同过滤算法

在这里插入图片描述
  假设我们已经有了一些人的评分 y y y和他们的超参数 w w w b b b,我们可以反过来预测样本的特征 x x x。使用同样的方法:

J ( x i ) = 1 2 ∑ j : y i ( j ) ≠ n o n e ( w ( j ) ⋅ x ( i ) + b ( j ) − y i ( j ) ) 2 + λ 2 ∣ ∣ x ( i ) ∣ ∣ J(x_{i})=\frac{1}{2}\sum_{j: y_{i}^{(j)} ≠ none}(w^{(j)} \cdot x^{(i)} + b^{(j)}-y_{i}^{(j)})^{2}+\frac{\lambda}{2}||x^{(i)}|| J(xi)=21j:yi(j)=none(w(j)x(i)+b(j)yi(j))2+2λ∣∣x(i)∣∣
J ( x 1 , x 2 , . . . , x m ) = ∑ i = 1 m J ( x i ) = ∑ i = 1 m ( 1 2 ∑ j : y i ( j ) ≠ n o n e ( w ( j ) ⋅ x ( i ) + b ( j ) − y i ( j ) ) 2 + λ 2 ∣ ∣ x ( i ) ∣ ∣ ) J(x_{1}, x_{2}, ..., x_{m}) = \sum_{i=1}^{m}J(x_{i})=\sum_{i=1}^{m}(\frac{1}{2}\sum_{j: y_{i}^{(j)} ≠ none}(w^{(j)} \cdot x^{(i)} + b^{(j)}-y_{i}^{(j)})^{2}+\frac{\lambda}{2}||x^{(i)}||) J(x1,x2,...,xm)=i=1mJ(xi)=i=1m(21j:yi(j)=none(w(j)x(i)+b(j)yi(j))2+2λ∣∣x(i)∣∣)

  合并一下,在这里我们其实最开始能获取的数据只有每个人对每个样本的评分,所以 w w w b b b x x x都是超参数,我们可以一起计算:

J = 1 2 ∑ ( i , j ) : y i ( j ) ≠ n o n e ( w ( j ) ⋅ x ( i ) + b ( j ) − y i ( j ) ) 2 + λ 1 2 ∑ j = 1 n ∣ ∣ w ( j ) ∣ ∣ + λ 2 2 ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ J=\frac{1}{2}\sum_{(i, j): y_{i}^{(j)}≠none}(w^{(j)}\cdot x^{(i)}+b^{(j)}-y_{i}^{(j)})^{2}+\frac{\lambda_{1}}{2}\sum_{j=1}^{n}||w^{(j)}||+\frac{\lambda_{2}}{2}\sum_{i=1}^{m}||x^{(i)}|| J=21(i,j):yi(j)=none(w(j)x(i)+b(j)yi(j))2+2λ1j=1n∣∣w(j)∣∣+2λ2i=1m∣∣x(i)∣∣

  注意,这样计算后得到的特征参数 x x x可能会很难得到实际解释,但的确是某些样本的共同特征。此外,协同过滤算法很难冷启动,即在很少用户参与评分的情况下很难取得好的效果。

使用

  我们的最终目标是预测出为 n o n e none none的部分,来决定是否为用户推荐这些内容。
  将用户的 w w w b b b以及内容的特征 x x x输入进模型,我们得到值 z = w ⋅ x + b z=w \cdot x + b z=wx+b,采用激活函数 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1得到 P ( y = 1 ∣ w , b , x ) P(y=1|w,b,x) P(y=1∣w,b,x)
  此外,我们可以调整一下损失函数的形式,来适应这个激活函数:

原先: L i ( j ) = g ( f ( w ( j ) , b ( j ) , x i ) ) − y i ( j ) = g ( w ( j ) ⋅ x ( i ) + b ( j ) ) − y i ( j ) L_{i}^{(j)} = g(f(w^{(j)}, b^{(j)}, x_{i})) - y_{i}^{(j)} = g(w^{(j)}\cdot x^{(i)} + b^{(j)}) - y_{i}^{(j)} Li(j)=g(f(w(j),b(j),xi))yi(j)=g(w(j)x(i)+b(j))yi(j)
现在: L i ( j ) = − y i ( j ) l o g ( f ( w ( j ) , b ( j ) , x ( i ) ) ) − ( 1 − y i ( j ) ) l o g ( 1 − f ( w ( j ) , b ( j ) , x ( i ) ) ) L_{i}^{(j)} = -y_{i}^{(j)}log(f(w^{(j)}, b^{(j)}, x^{(i)}))-(1-y_{i}^{(j)})log(1-f(w^{(j)}, b^{(j)}, x^{(i)})) Li(j)=yi(j)log(f(w(j),b(j),x(i)))(1yi(j))log(1f(w(j),b(j),x(i)))
损失函数变为: J ( w , b , x ) = ∑ ( i , j ) : y i ( j ) ≠ n o n e L i ( j ) J(w,b,x) = \sum_{(i, j): y_{i}^{(j)}≠none} L_{i}^{(j)} J(w,b,x)=(i,j):yi(j)=noneLi(j)

均值归一化

  对于样本 i i i,我们对它的所有评分取均值得到 u i : = m e a n { y i ( j ) ≠ n o n e } u_{i}:=mean\left \{ y_{i}^{(j)} ≠ none \right \} ui:=mean{yi(j)=none},然后,在线性拟合函数中加入归一化操作 f ( w ( j ) , b ( j ) , x ( i ) ) = w ( j ) ⋅ x ( i ) + b ( j ) + u i f(w^{(j)},b^{(j)},x^{(i)}) = w^{(j)} \cdot x^{(i)}+b^{(j)} + u_{i} f(w(j),b(j),x(i))=w(j)x(i)+b(j)+ui
  这样做可以简化梯度计算,更显著的变化是,如果人没有为任何样本打分,那代入TA的初始参数 w = 0 ⃗ w=\vec{0} w=0 b = 0 b=0 b=0后,每个样本的得分会变成其他人打分的平均值,更符合实际用途。

基于内容的推荐

原理

  根据用户的信息,我们训练一个模型来预测他们的喜好 v u v_{u} vu
在这里插入图片描述
  基于样本的信息,我们训练一个模型来预测它们的特征 v m v_{m} vm
在这里插入图片描述
  然后,用激活函数 g ( v u ⋅ v m ) g(v_{u} \cdot v_{m}) g(vuvm)来判断是否要将样本推荐给该用户。
在这里插入图片描述
  构造损失函数 J = ∑ ( i , j ) : y i ( j ) ≠ n o n e ( v u ( j ) ⋅ v m ( i ) − y i ( j ) ) 2 + NN regularzation term J = \sum_{(i, j): y_{i}^{(j)} ≠ none}(v_{u}^{(j)}\cdot v_{m}^{(i)}-y_{i}^{(j)})^{2}+\text{NN regularzation term} J=(i,j):yi(j)=none(vu(j)vm(i)yi(j))2+NN regularzation term

  寻找与样本 i i i相似的样本: m i n ∣ ∣ v m ( k ) − v m ( i ) ∣ ∣ min \ ||v_{m}^{(k)} - v_{m}^{(i)}|| min ∣∣vm(k)vm(i)∣∣

基于TensorFlow的代码

在这里插入图片描述

从大目录里推荐

  当样本量很大时,每一次都完整跑一遍内积非常费时间,通常在实际应用中,会进行以下两个操作:检索排名

检索

  检索(Retrieval)步骤的目的是从庞大的候选集合中快速筛选出一小部分最有可能满足用户需求的项目。这个步骤通常需要高效且能够处理大规模数据。常见的检索方法包括:
  (1)倒排索引(Inverted Index):倒排索引是一种数据结构,用于快速查找包含某个特定词的文档。它将每个词映射到包含该词的文档列表。
  (2)哈希(Hashing):通过哈希函数将高维数据映射到低维空间,以便快速查找相似的项目。
  (3)近似最近邻搜索(Approximate Nearest Neighbor Search, ANNS):通过近似算法(如LSH、HNSW等)在高维空间中快速找到最接近的邻居。
  (4)机器学习模型(如DSSM、BERT等):使用深度学习模型对用户查询和候选项目进行编码,计算相似度并进行排序。

  我们需要做的是平衡检索样本的数量,检索越多的样本会使准确度提高,但会使时间成本增加。

排名

  使用上述模型计算样本与用户喜好之间的相似度,并进行排名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18611.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vue基础

1. vue是什么? Vue.js (读音 /vju ː /, 类似于 view ) 是一套构建用户界面的渐进式框架。 Vue 只关注视图层, 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 官…

简单学点位运算(Java)

1. 位运算符 Java中常用的位运算符如下: 2. 详解 (1)按位与 & 规则:同一位上全是 1 时,结果为 1,否则为 0。用途: 清零某些位:x & 0xF0可以保留高 4 位,清除…

637. 二叉树的层平均值【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 637. 二叉树的层平均值 一、题目描述 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 二、测试用例 示例 1&a…

111页PPT丨服装零售行业数字化时代的业务与IT转型规划

安踏的数字化转型项目在方法论、计划和组织方面展现出了明确的目标、系统的规划和有效的执行。以下是对这三个方面的详细分析: 方法论 安踏的数字化转型方法论主要围绕以下几个核心点展开: 服务于整体战略:数字化转型不是孤立的项目&#…

人工智能技术的应用前景与我们的应对策略

​ 大家好,我是程序员小羊! 随着人工智能(AI)技术的快速发展,其在社会生活、产业转型以及科技进步中发挥着日益重要的作用。AI正逐步改变着我们的生活和工作方式,同时也带来了技术和伦理上的诸多挑战。本文…

基于Java Springboot论坛系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

Vue2教程001:初识Vue

文章目录 1、初识Vue1.1、Vue2前言1.2、创建Vue实例1.3、插值表达式1.4 Vue响应式特性 1、初识Vue 1.1、Vue2前言 Vue是什么? 概念:Vue是一个用于构建用户界面的渐进式框架。 Vue的两种使用方式: Vue核心包开发 场景:局部模块…

113页PPT制造业研发工艺协同及制造一体化

研发工艺协同及制造一体化解决方案是制造业数字化转型的重要组成部分,它涵盖了从产品设计到生产的全过程,旨在提高生产效率、降低成本、提升产品质量,并增强企业的市场竞争力。以下是对该解决方案的详细阐述: 一、方案概述 研发…

红外遥控信号解码

红外遥控信号解码 之前就已经做过红外遥控的解码了,但是一直没有做记录,最近的项目又使用到了红外遥控,索性就把他捡起来记录一下,对于信号的解码,我一般的习惯都是先用逻辑分析仪抓取一下信号波形,然后对…

Spring:纯注解开发模式-Ioc对bean的管理

我们知道(请见 注解开发定义bean),可以使用注解来配置bean,但是依然有用到配置文件,在配置文件中对包进行了扫描,Spring在3.0版已经支持纯注解开发 Spring3.0开启了纯注解开发模式,使用Java类替代配置文件…

赛元免费开发板申请

在作者网上冲浪的时候,突然发现了一个国内的良心企业,虽然现在不是很有名,但是他现在是有一个样品申请的活动,他就是国内的Redfine新定义,他申请的板子是用的赛元MCU,作者本着有板子就要申请的原则&#xf…

【编译】多图解释 什么是短语、直接短语、句柄、素短语、可归约串

一、什么是短语二、什么是“直接”短语?三、什么是句柄?四、什么是素短语?五、什么是最左素短语可归约串就是“最左素短语” 首先,这些概念 都是相对于【句型】的,都是相对于【句型】的,都是相对于【句型】…

基础IO2

文章目录 磁盘结构磁盘存储结构磁盘的逻辑结构引入文件系统理解文件系统inode 映射 data blocks文件名与inode的关系dentry树文件描述符与进程之间的关系 深刻理解软硬链接软链接硬链接 动静态库静态库1. 手动制作静态库2.调用静态库(1)安装到系统(2)自己指定查找路径(3)自己创…

RPC-健康检测机制

什么是健康检测? 在真实环境中服务提供方是以一个集群的方式提供服务,这对于服务调用方来说,就是一个接口会有多个服务提供方同时提供服务,调用方在每次发起请求的时候都可以拿到一个可用的连接。 健康检测,能帮助从连…

ZD Soft Screen Recorder:电脑录屏软件

前言 ZD Soft Screen Recorder 是一款屏幕录制软件 安装环境 [名称]:ZD Soft Screen Recorder [版本]:11.7.2 [大小]:6.8MB [语言]:英文 [环境]:pc 链接: 百度网盘 请输入提取码 提取码: ua23 软件界面 1、双击…

某杀软环境下的添加账户

某杀软环境下的添加账户 我们在某个杀软环境下,正常添加账户一般是会被直接拦截的 白+黑 在这个环境下,白+黑是最实用的绕过方式,我们可以通过调用winapi来创建账户,这些代码再存储到dll里面&#xff0c…

《Spring 基础之 IoC 与 DI 入门指南》

一、IoC 与 DI 概念引入 Spring 的 IoC(控制反转)和 DI(依赖注入)在 Java 开发中扮演着至关重要的角色,是提升代码质量和可维护性的关键技术。 (一)IoC 的含义及作用 IoC 全称为 Inversion of…

【C++】set,map,multiset,multimap的介绍和使用

set、map、multiset、multimap set、multiset的介绍和使用1、关联式容器2、键值对3、树形结构的关联式容器4、setset的介绍set的定义set的使用 5、multisetmultiset的介绍multiset的使用 map、multimap的介绍和使用1、map的介绍map的定义insert插入函数map的迭代器find查找函数…

Midjourney基础命令和提示词

1 基础命令 1.1 /imagine prompt 生成图片的核心命令,prompt 后输入描述。 /imagine prompt: A majestic dragon flying over a misty mountain, cinematic lighting, 4K resolution 高级提示 1.1.1 基本参数 图片比例 --ar 图片比例 混乱 Aspect Ratios --…

【代码pycharm】动手学深度学习v2-04 数据操作 + 数据预处理

数据操作 数据预处理 1.数据操作运行结果 2.数据预处理实现运行结果 第四课链接 1.数据操作 import torch # 张量的创建 x1 torch.arange(12) print(1.有12个元素的张量:\n,x1) print(2.张量的形状:\n,x1.shape) print(3.张量中元素的总数&#xff1…