FM算法介绍

news2024/11/25 12:28:43

文章目录

  • 1. 逻辑回归模型的不足
  • 2. POLY2模型——特征交叉的开始
  • 3. FM模型——隐向量特征交叉
  • 4. FFM模型——引入特征域的概念
  • 5. 从POLY2到FFM的模型演化过程
  • 6. 参考书籍

1. 逻辑回归模型的不足

逻辑回归作为一个基础模型,显然有其简单、直观、易用的特点。 但其局限性也是非常明显的:

表达能力不强,无法进行特征交叉、特征筛选等一系列较为 "高级"的操作,因此不可避免地造成信息的损失。

为解决这一问题,推荐模型朝着复杂化的方向继续发展,衍生出因子分解机等高维的复杂模型 。

上一篇文章:推荐模型——逻辑回归中提到逻辑回归模型表达能力不强,会不可避免的造成信息损失,还举例“辛普森悖论”

因此,通过改造逻辑回归模型,使其具备特征交叉的能力是必要和迫切的 。

2. POLY2模型——特征交叉的开始

针对特征交叉的问题,算法工程师经常采用先于动组合特征,再通过各种分析手段筛选特征的方法,但该方法无疑是低效的。 更遗憾的是,人类的经验往往有局限性,程序员的时间和精力也无法支撑其找到最优的特征组合 。 POLY2 模型进行特征的"暴力"组合成了可行的选择 。因此,采用POLY2 模型进行特征的"暴力"组合成了可行的选择 。

  • POLY2模型的数学形式:

在这里插入图片描述

可以看到,该模型对所有特征进行了两两交叉,通过暴力组合的方式在一定程度上解决了特征组合的问题。其本质上仍是线性模型,其训练方法与逻辑回归并无区别,因此便于工程上的兼容。

但POLY2模型存在两个较大的缺陷

  • 在处理互联网数据时,经常采用one-hot编码的方法处理类别型数据, 致使特征向量极度稀疏, POLY2进行元选择的特征交叉原本就非常稀疏的特征向量更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。
  • 权重参数的数量由n直接上升到n2,极大地增加了训练复杂度 。

one-hot编码介绍:

one-hot 编码是将类别型特征转换成向量的一种编码方式 。 由于类别型特征不具备数值化意义,如果不进行 one-hot 编码,无法将其直接作为特征向量的一个维度使用。

举例来说,某样本有三个特征,分别是星期性别城市,用 [Weekday=Tuesday, Gender=Male, City=London] 表示。由于模型的输入特征向量仅可以是数值型特征向量 ,无法把 “Tuesday” 这个字符串直接输入模型, 需要将其数值化,最常用的方法就是将特征做 one-hot 编码 。 编码的结果如图:

在这里插入图片描述

虽然 one-hot 编码方式可以将类别型特征转变成数值型特征向量,但是会不可避免地造成特征向量中存在大量数值为0的特征维度

3. FM模型——隐向量特征交叉

为了解决 POLY2 模型的缺陷, 2010 年,Rendle提出了FM模型

FM二阶部分的数学形式:

在这里插入图片描述

与 POLY2相比,其主要区别是用两个向量的内积取代了单一的权重系数W。 具体地说, FM为每个特征学习了一个隐权重向量( latent vector)。 在特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重 。

本质上, FM 引人隐向量的做法,与矩阵分解用隐向量代表用户和物品的做法异曲同工。可以说FM是将矩阵分解隐向量的思想进行了进 一步扩展,从单纯的用户、物品隐向量扩展到了所有特征上 。

FM 通过引人特征隐向量的方式,直接把POLY2模型n2级别的权重参数数量减少到了nk(k为隐向量维度, n>>k)。 在使用梯度下降法进行 FM训练的过程中, FM的训练复杂度同样可被降低到nk级别,极大地降低了训练开销。

隐向量的引人使 FM 能更好地解决数据稀疏性的问题

举例来说,在某商品推荐的场景下,样本有两个特征,分别是频道( channe1) 和品牌 ( brand ),某训练样本的特征组合是 (ESPN, Adidas)。

POLY2中,只有当 ESPN 和 Adidas 同时出现在一个训练样本中时模型才能学到这个组合特征对应的权重;

而在FM中, ESPN 的隐向量也可以通过(ESPN, Gucci)样本进行更新, Adidas的隐向量也可以通过 (NBC, Adidas)样本进行更新,这大幅降 低了模型对数据稀疏性的要求。甚至对于 一个从未出现过的特征组合 (NBC,Gucci),由于模型之前已经分别学习过 NBC和 Gucci的隐向量, 具备了计算该特征组合权重的能力,这是 POLY2无法实现的 。

相比 POLY2, FM 虽然丢失了某些具体特征组合的精确记忆能力,但是泛化能力大大提高

在工程方面, FM 同样可以用梯度下降法进行学习,使其不失实时性和灵活性 。 相比之后深度学习模型复杂的网络结构导致难以部署和线上服务, FM 较容易实现的模型结构使其线上推断的过程相对简单,也更容易进行线上部署和服务。 因此, FM在 2012-2014年前后,成为业界主流的推荐模型之一。

4. FFM模型——引入特征域的概念

相比FM模 型,FFM模型引入了特征域感知( field-aware)这一概念,使模型的表达能力更强 。

FFM的数学形式的二阶部分:

在这里插入图片描述

区别FM,隐向量改变:

在这里插入图片描述

这意味着每个特征对应的不是唯一一个隐向量,而是一组隐向量。当Xj1特征与Xj2特征进行交叉时,Xj1特征会从Xj1的这一组隐向量中挑出与特征Xj2的域f2对应的隐向量Wj1.f2进行交叉。同理,Xj2也会用与Xj1的域f1对应的隐向量进行交叉 。

在这里插入图片描述

5. 从POLY2到FFM的模型演化过程

在这里插入图片描述

6. 参考书籍

《深度学习推荐系统》

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

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

相关文章

第二讲:MySQL安装及启动 Windows

目录 1.MySQL安装及启动2.MySQL常用命令: 1.MySQL安装及启动 1、官网下载 官网入口:官网 点击下载。 2、双击打开安装包 3、安装 4.设置密码(随便设置能记住就行) 5.配置环境变量 6、找到安装的MySQL路径,复制到上方…

经典CNN(二):ResNet50V2算法实战与解析

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 1 论文解读 在《Identity Mappings in Deep Residual Networks》中,作者何凯明先生提出了一种新的残差单元,为区别原始…

MOS,PCB如何添加散热孔、过孔

一、什么是 PCB 散热孔? 散热孔是利用贯通PCB板的通道(过孔)使热量传导到背面来散热的手法,配置在发热体的正下方或尽可能靠近发热体。 散热孔是利用PCB板来提高表面贴装部件散热效果的一种方法,在结构上是在PCB板上…

element-ui里的el-table在grid布局下切换数据有滚动条时不断增加?

今天在项目里面遇到了这个问题,相当炸裂,看了半天都没有看出什么问题,很是逆天,记录一下 下面使用代码情景复现一下:el-table 是在 grid 布局下面的,不是子层级,中间还有一层 content 的元素包…

【数据结构】差分数组

【数据结构】差分数组 差分数组二维差分数组二维数组的前缀和 差分数组 如果给定一个包含1000万个元素的数组,同时假定会有频繁区间修改操作,但是不会有频繁的查询操作,比如对某个范围【l,r】内的数字加上某个数字,此时…

Java基础-->异常

什么是异常? 异常:异常就是代表程序出现的问题 误区:不是让我们以后不出现异常,而是程序出了异常之后该如何处理 Error 代表系统级别的错误(属于原重问题) 系统一旦出现问题,sun公司会把这些…

数据库应用:Mycat实现读写分离

目录 一、理论 1.Mycat 2.Mycat安装启动 3.Mycat搭建读写分离 4.垂直分库 5.水平分表 6.Mycat高可用 7.Mycat安全设置 8.Mycat监控工具 二、实验 1.Mycat读写分离 2.Mycat监控安装 三、问题 1.Mycat命令无法补全 2.Mycat启动失败 3.zookeeper启动报错 四、总结…

基于SpringBoot+Vue的冬奥会科普平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Java通过URL对象实现简单爬虫功能

目录 一、URL类 1. URL类基本概念 2. 构造器 3. 常用方法 二、爬虫实例 1. 爬取网络图片(简易) 2. 爬取网页源代码 3. 爬取网站所有图片 一、URL类 1. URL类基本概念 URL:Uniform Resource Locator 统一资源定位符 表示统一资源定位…

动态规划--回文串问题

一)回文子串: 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 思路1:暴力枚举: for(int i0;i<array.length;i) for(int ji;j<array.length;j) 我们的中心思路就是枚举出所有的子字符串&#xff0c;然后进行判断所有的子串是否是回文串 思路2:中心扩散: 我们从左向…

​MySQL高阶语句(三)

目录 1、内连接 2、左连接 3、右连接&#xff1a; 二、存储过程⭐⭐⭐ 4. 调用存储过程 5.查看存储过程 5.1 查看存储过程 5.2查看指定存储过程信息 三. 存储过程的参数 3.1存储过程的参数 3.2修改存储过程 四.删除存储过程 MySQL 的连接查询&#xff0c;通常都是将来…

ElasticSearch学习--RestClient及案例

目录 RestClient查询文档 快速入门 总结 全文检索&#xff08;match&#xff09;查询 精确查询 复合查询 查询总结 排序&#xff0c;分页 高亮 RestClient查询文档 快速入门 总结 全文检索&#xff08;match&#xff09;查询 多种查询的差异都在做类型和条件上&#x…

JS 自定义的悬浮窗被浏览器遮挡问题解决方案

遮挡问题解决思路&#xff0c;首先拿到外层的DOM元素div的宽高&#xff0c;然后根据鼠标悬浮事件的元素e e.clientX表距离页面窗口宽的位置 e.clientY代表距离页面窗口高的位置 然后设置这个悬浮窗为200px 那个这个div的宽高 dom.getElementById(xxxx).cliengHeight dom.g…

FutureTask

Future接口 Future接口&#xff08;FutureTask实现类&#xff09;定义了操作异步任务执行一些方法&#xff0c;如获取异步任务执行的结果、取消任务的执行、判断任务是否取消、判断任务执行是否完成等。它提供了一种并行异步计算的功能。比如主线程让子线程去执行任务&#xff…

C语言两种方法求证大小端存储

目录 什么是大小端存储&#xff1f; 字节序的概念&#xff1a; 小端字节序存储&#xff1a; 大端字节序存储&#xff1a; 什么是低位字节、高位字节&#xff1f; 记忆技巧&#xff1a; C语言求证大小端存储 法一&#xff1a; 法二&#xff1a; 总结&#xff1a; 什么是…

CAXA中.exb或者.dwg文件保存为PDF

通常CAXAZ中的文件为.exb或者.dwg格式&#xff0c;我们想打印或者保存为PDF文件格式&#xff0c;那么就用一下的方法&#xff1a; CAXA文件如图所示&#xff1a; 框选出你要打印的图纸&#xff01;&#xff01;&#xff01;&#xff01; 我们选择"菜单"->"…

用户订单信息案例

需求: 用户输入商品价格和商品数量&#xff0c;以及收货地址&#xff0c;可以自动打印订单信息 分析: ① 需要输入3个数据&#xff0c;所以需要3个变量来存储price num address ② 需要计算总的价格total ③ 页面打印生成表格, 里面填充数据即可 ④ 记得最好使用模板字符串 【…

java.io.InputStreamReader的read()函数返回值是字符对应的Unicode码点

java.io.InputStreamReader的read()函数定义&#xff1a; https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/io/InputStreamReader.html#read() 这个返回的值其实就是解码后的字符对应的Unicode码点&#xff08;Unicode code point&#xff09;。 举例 例如…

MySQL表的管理

目录 1.mysql中&#xff0c;数据存储过程分为四步 2.数据库命名规则 3.创建数据库 4.管理数据库的方法 5.修改数据库&#xff08;一般不改&#xff0c;最多改字符集&#xff09; 6.删除数据库 7.如何创建数据表 8.修改表 9.重命名表 10.删除表&#xff08;注意⚠️无…