推荐系统三十六式学习笔记:原理篇.模型融合14|一网打尽协同过滤、矩阵分解和线性模型

目录

  • 从特征组合说起
  • FM模型
    • 1.原理
    • 2.模型训练
    • 3.预测阶段
    • 4.一网打尽其他模型
    • 5.FFM
  • 总结

在上一篇文章中,我们讲到了使用逻辑回归和梯度提升决策树组合的模型融合办法,用于CTR预估,给这个组合起了个名字,叫“辑度组合”。这对组合中,梯度提升决策树GBDT,所起的作用就是对原始的特征做各种有效的组合,一颗树一个叶子节点就是一种特征组合。

从特征组合说起

从逻辑回归最朴素的特征组合就是二阶笛卡尔乘积,但是这种暴力组合存在如下问题:
1.两两组合导致特征维度灾难;
2.组合后的特征不见得都有效,事实上大部分可能无效;
3.组合后的特征样本非常稀疏,即组合容易,但是样本中可能不存在对应的组合,也就没办法在训练时更新参数。

如果把包含了特征两两组合的逻辑回归线性部分写出来,就是:
y ^ = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n ∑ j = j + 1 n ω i j x i x j \hat{y} = ω_0 +\sum_{i=1}^n{ω_ix_i} +\sum_{i=1}^n\sum_{j=j+1}^n{ω_{ij}x_ix_j} y^=ω0+i=1nωixi+i=1nj=j+1nωijxixj

这和原始的逻辑回归相比,多了后面的部分,特征两两组合,也需要去学习对应的参数权重。
问题是两两组合后可能没有样本能欧学习到$w_{ij},在应用中,对于这些组合,也只能放弃,因为没有学到权重。

针对这个问题,就有了一个新的算法模型:因子分解机模型,也叫FM,即Factorization Machine。因子分解机也常常用来做模型融合。

FM模型

1.原理

因子分解机模型是在2010年被提出,因为逻辑回归在做特征组合时样本稀疏,无法学习到很多特征组合的权重,所以因子分解机的提出者就想,能否对上面那个公式中的 w i j w_{ij} wij做解耦,让每一个特征学习一个隐因子向量出来。

正如矩阵分解时,为每一个用户和每一个物品各自都学习一个隐因子向量,这样,任何两个特征需要组合时,只需隐因子变量做向量点积,就是两者组合特征的权重了。

针对逻辑回归的线性部分:
y ^ = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \hat{y} =\omega_{0} + \sum_{i=1}^n{\omega_{i}x_{i}} + \sum_{i=1}^{n}{\sum_{j=i+1}^{n}}{<v_i,v_j>x_ix_j} y^=ω0+i=1nωixi+i=1nj=i+1n<vi,vj>xixj

这个公式和前面特征组合的公式相比,不同之处就是原来有个\omega_{ij},变成了两个隐因子向量的点积<V_i,V_j>。

它认为两个特征之间,即便没有出现在一条样本中,也是有间接联系的。比如特征A和特征B,出现在一些样本中,特征B和特征C也出现在一些样本中,那么特征A和特征C无论是否出现在一些样本中,我们有理由认为两个特征仍然有些联系。

如果在实际预测CTR时,特征A和特征C真的同时出现在一些样本中,如果你用的是因子分解模型,你可以直接取特征A和特征C的隐因子向量,进行点积计算,就得到两者组合的权重。因子分解机的先进之处就在于此。

既然二阶组合特征可以学到隐因子向量,那么三阶、四阶、五阶呢?实际上,组合越多,计算复杂度就会陡增,一般在实际使用中,因子分解机多用在二阶特征组合中。

2.模型训练

因子分解机的参数学习并无特别之处,看目标函数,这里是把他当做融合模型来看的,用来做CTR预估,因预测目标是一个二分类,因子分解机的输出还需要经过sigmoid函数变换:
σ ( y ^ ) = 1 1 + e − y ^ \sigma(\hat{y}) =\frac{1}{1+ e^{-\hat{y}}} σ(y^)=1+ey^1

因此损失目标函数为:
l o s s ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( σ ( y ^ ) ) + ( 1 − y ( i ) ) l o g ( 1 − σ ( y ^ ) ] loss(\theta) = - \frac{1}{m}\sum_{i=1}^m{[y^{(i)} log(\sigma(\hat{y})) + (1-y^{(i)})log(1-\sigma(\hat{y}) ]} loss(θ)=m1i=1m[y(i)log(σ(y^))+(1y(i))log(1σ(y^)]

公式中 σ ( y ^ ) \sigma(\hat{y}) σ(y^) 是因子分解机的预测输出后经过sigma函数变换得到的预估CTR, y ^ \hat{y} y^是真实样本的类别标记,正样本为1,负样本为0,m是样本总数。

对于这个损失目标函数使用梯度下降或者随机梯度下降,就可以得到模型的参数,注意函数实际上还需要加上正则项。

3.预测阶段

因子分解机中二阶特征组合那一部分,在实际计算时,复杂度有点高,如果隐因子向量的维度是k,特征维度是n,那么这个复杂度为O(kn^2),其中n方是特征要两两组合,k是每次组合都要对k维向量计算
点积。需稍微改造一下,改造过程如下:

loop1 begin: 循环k次,k就是隐因子向量的维度,其中,循环到第f次时做以下事情loop2 begin:循环n个特征,第i次循环时做这样的事情1. 从第i个特征的隐因子向量中拿出第f维的值2. 计算两个值:A是特征值和f维的值相乘,B是A的平方loop2 end把n个A累加起来,并平方得到C,把n个B也累加起来,得到D用C减D,得到Eloop1 end把k次循环得到的k个E累加起来,除以2

这就是因子分解机中,二阶组合部分的实际计算方法,目前复杂度下降为O(kn)。

4.一网打尽其他模型

下面继续带你见识一些因子分解机的神奇之处。看下面这张图:
在这里插入图片描述
下面继续带你见识一些因子分解机的神奇之处。看下面这张图:

这张图中的每一条样本都记录了用户对电影的评分,最右边的y是评分,也就是预测目标;左边的特征有五种,用户ID、当前评分的电影ID、曾经评过的其他分、评分时间、上一次评分的电影。

现在我们来看因子分解机如何一网打尽其他模型的,这里说的打败是说模型可以变形成其他模型。

前面例子,因子分解机实现了带有特征组合的逻辑回归。

现在假设图中的样本特征只留下用户ID和电影ID,因子分解机模型就变成:
y ^ = ω 0 + ω u + ω i + < V u , V i > \hat{y} =\omega_{0} + \omega_{u} + \omega_{i} + <V_{u},V_{i}> y^=ω0+ωu+ωi+<Vu,Vi>

用户ID和电影ID,在一条样本中,各自都只有一个维度1,其他都是0。所以在一阶部分就没有了求和符号,直接是 w u w_u wu w i w_i wi,二阶部分乘积也只剩下了1,其他都为0,就转变为偏置信息的SVD。

继续,在SVD基础上把样本中的特征加上用户历史评分过的电影ID,再求隐因子向量,就转变为SVD++;再加上时间信息,就变成了time-SVD。

因子分解机把前面讲过的矩阵分解一网打尽了,顺便还干起了逻辑回归的工作。正因为如此,因子分解机常常用来做模型融合,在推荐系统的排序阶段肩负起对召回结果做重排序的任务。

5.FFM

在因子分解机基础上可以进行改进,改进思路是:不但认为特征和特征之间潜藏着一些关系,还认为特征和特征类型也有千丝万缕的关系。

这个特征类型,就是某些特征实际上来自数据的同一个字段。比如用户id,占据了很多维度,变成了很多特征,但他们都属于同一个类型,都叫做用户ID。这个特征类型就是字段,即Field.所以这种改进叫做Field-aware Factorization Machines ,简称FFM。

因子分解机模型如下:
KaTeX parse error: Expected group after '_' at position 42: …_{i=1}^n{\omega_̲}

总结

今天,我给你介绍了另一种常用来做CTR预估的模型,因子分解机。因子分解机最早提出在2010年,在一些数据挖掘比赛中取得了不错的成绩,后来被引入到工业界做模型融合,也表现不俗。
严格来说,因子分解机也算是矩阵分解算法的一种,因为它的学习结果也是隐因子向量,也是用隐因子向量的乘积来代替单个权重参数。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yokogawa AQ6370E 10与AQ6370E 20 光谱仪的区别?

Yokogawa AQ6370E 20相比AQ6370E 10在波长准确度上有哪些改进&#xff1f; AQ6370E 20在波长准确度上相对于AQ6370E 10有明显的提升&#xff0c;这对于需要高精度波长测量的应用来说是非常有益的。 波长精度提升&#xff1a;AQ6370E 20的波长精度相比AQ6370E 10有所提升&#…

SQL面试题练习 —— 查询每个用户的第一条和最后一条记录

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;小红书。 1 题目 现有一张订单表 t_order 有订单ID、用户ID、商品ID、购买商品数量、购买时间&#xff0c;请查询出每个用户的第一条记录和最后一条记录。样例数据如下&#xff1a; ---------------------------------------…

个人支付系统实现

基础首页&#xff1a; 订单&#xff1a; 智能售卡系统 基于webmanworkerman开发 禁用函数检查 使用这个脚本检查是否有禁用函数。命令行运行curl -Ss https://www.workerman.net/check | php 如果有提示Function 函数名 may be disabled. Please check disable_functions in …

外星生命在地球的潜在存在:科学、哲学与社会的交织

外星生命在地球的潜在存在&#xff1a;科学、哲学与社会的交织 摘要&#xff1a;近年来&#xff0c;关于外星生命是否存在的讨论日益激烈。有研究表明&#xff0c;外星人可能已经在地球漫步&#xff0c;这一观点引发了广泛的科学、哲学和社会学思考。本文将从科学角度探讨外星…

线程池FutureTask浅谈

一,概述 FuturnTask实现了Future与Runnable接口,笔者知道,ThreadPoolExecutor#submit可以传入Callable接口而非Runnable,区别点在于Callable可以返回值,而整个FuturnTask可以理解为Callable设计,用来优雅地异步获取执行结果,无需手动Condition去实现。 围绕此,需知道…

鸿蒙开发系统基础能力:【@ohos.wallpaper (壁纸)】

壁纸 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import wallpaper from ohos.wallpaper;WallpaperType 定义壁纸类型。 系统能力: 以下各项对应的系统能力均为SystemCapability…

python接口自动化的脚本

使用Requests库进行GET请求 Requests是Python中最常用的HTTP库,用于发送HTTP请求。下面是一个简单的GET请求示例,用于从API获取数据。 import requests url = "https://api.example.com/data" response = requests.get(url) if response.status_code == 200:prin…

【项目实训】falsk后端连接数据库以及与前端vue进行通信

falsk连接数据库 我们整个项目采用vueflaskmysql的框架&#xff0c;之前已经搭建好了mysql数据库&#xff0c;现在要做的是使用flask连接到数据库并测试 安装flask 首先安装flask pip install flask 进行数据库连接 数据库连接需要使用到pymysql库以及flask库 连接数据库…

通过注释语句,简化实体类的定义(省略get/set/toString的方法)

引用Java的lombok库&#xff0c;减少模板代码&#xff0c;如getters、setters、构造函数、toString、equals和hashCode方法等 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructorData&#xf…

使用【docker】简单部署打包构建好的镜像并运行python项目

使用【docker】简单部署运行python项目 方案一&#xff1a;使用打包好的镜像直接运行 一&#xff0e;项目配置 项目压缩包&#xff1a;project.tar.gz 项目目录存放在服务器路径&#xff1a;/var/opt/app (1)解压项目文件到该目录下&#xff1a;/var/opt/app 命令&#xff1…

Linux-引导过程与服务控制

目录 一、Linux操作系统引导过程 1、引导过程总览 2、引导过程详解 2.1、开机自检&#xff08;BIOS&#xff09; 2.2、 MBR引导 2.3、GRUB菜单 2.4、加载内核(kernel) 2.5、init进程初始化 3、系统初始化进程 3.1、Systemd单元类型 3.2、运行级别所对应的 Systemd 目…

SherlockChain:基于高级AI实现的智能合约安全分析框架

关于SherlockChain SherlockChain是一款功能强大的智能合约安全分析框架&#xff0c;该工具整合了Slither工具&#xff08;一款针对智能合约的安全工具&#xff09;的功能&#xff0c;并引入了高级人工智能模型&#xff0c;旨在辅助广大研究人员针对Solidity、Vyper和Plutus智…

前端 Array.sort() 源码学习

源码地址 V8源码Array 710行开始为sort()相关 Array.sort()方法是那种排序呢&#xff1f; 去看源码主要是源于这个问题 // In-place QuickSort algorithm. // For short (length < 22) arrays, insertion sort is used for efficiency.源码中的第一句话就回答了我的问题…

Potato(土豆)一款轻量级的开源文本标注工具(二)

示例项目&#xff08;模版&#xff09; Potato 旨在提高数据标注的可复制性&#xff0c;并降低研究人员设置新标注任务的成本。因此&#xff0c;Potato 提供了一系列预定义的示例项目&#xff0c;并欢迎公众向项目中心贡献。如果您使用 Potato 进行了自己的标注工作&#xff0…

海思平台使用ITTP_Stream调试sensor

目录 相关资料1.ISP相关资料2.MIPI RX相关资料3.sensor资料4.MIPI标准 准备工作1.准备sensor驱动2.准备sample vio3.准备上位机和下位机程序 运行1.只运行HiPQTool1.1.板端运行1.2.PC端运行HiPQTool 2.使用ITTP_Stream2.1.板端运行2.2.打开上位机软件 相关资料 1.ISP相关资料 …

uniapp开发手机APP、H5网页、微信小程序、长列表插件

ml-list 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id18928 ml-list介绍 1、ml-list 列表组件&#xff0c;包含基本列表样式、可扩展插槽机制、长列表性能优化、多端兼容。 2、ml-list 低代码列表&#xff0c;帮助使用者快速构建列表&#xff0c;简单配置&…

秋招突击——6/26~6/27——复习{二维背包问题——宠物小精灵之收服}——新作{串联所有单词的字串}

文章目录 引言复习二维背包问题——宠物小精灵之收服个人实现重大问题 滚动数组优化实现 新作串联所有单词的字串个人实现参考实现 总结 引言 今天应该是舟车劳顿的一天&#xff0c;头一次在机场刷题&#xff0c;不学习新的东西了&#xff0c;就复习一些之前学习的算法了。 复…

百度Apollo的PublicRoadPlanner一些移植Ros2-foxy的思路(持续更新)

如今的PublicRoadPlanner就是之前耳熟能详的EM planner 计划 —— ROS2与CARLA联合仿真 结构化场景: 规划算法:EM-planner 控制算法:MPC和PID 非结构化场景: 规划算法采用Hybrid A* (1)小车模型搭建(计划参考Github上Hybrid上的黑车,比较炫酷) (2)车辆里程计: 位…

深入比较:Batch文件与Shell脚本的异同

在操作系统中&#xff0c;自动化脚本是一种常见的工具&#xff0c;用于执行一系列自动化命令或程序。Windows和类Unix系统都提供了各自的脚本解决方案&#xff1a;Batch文件&#xff08;在Windows中&#xff09;和Shell脚本&#xff08;在类Unix系统中&#xff09;。本文将详细…

有哪些方法可以恢复ios15不小心删除的照片?

ios15怎么恢复删除的照片&#xff1f;在手机相册里意外删除了重要的照片&#xff1f;别担心&#xff01;本文将为你介绍如何在iOS 15系统中恢复已删除的照片。无需专业知识&#xff0c;只需要按照以下步骤操作&#xff0c;你就能轻松找回宝贵的回忆。 一、从iCloud云端恢复删除…