FM模型与POLY2模型

news2025/1/10 20:23:13
两个核心细节

掌握FM,有两个细节需要注意:参数量级的变化和时间复杂度的变化。

首先对于参数量级,由线性模型到多项式模型到FM模型参数量级变化为:

n–>n*n–>kn (k<<n)

其次是由原始FM公式到化简之后的FM公式复杂度的变化情况为:

Kn*n–>kn

线性模型

回归问题我们一般使用的比较见得baseline就是线性回归,二元分类问题就是逻辑回归LR。

线性模型公式如下(回归问题):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于线性模型,我们的假设一般是认为特征之间是相互独立的,无法学习到特征之间的交叉影响。

为了解决特征交叉的问题,我们一般可以人为的加入一些自己的先验信息,比如做一些特征之间的交互,不过这个很需要人们的经验。

POLY2模型–暴力组合特征交叉

这个时候,POLY2模型成了可行的方案。POLY2 模型,对所有特征做了两两交叉,并对所有特征组合赋予了权重,在一定程度上解决了特征组合问题,本质仍然是线性模型,训练方法与逻辑回归没有区别。

我们把POLY2(只是特征两两交叉的部分)加到线性模型中,从而模型可以过渡到多项式模型,公式如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(ps:看到这里我自己有一个疑问,同一个特征onehot之后,会在自己里面做特征交叉吗)

看这个公式,主要是看后面那个交叉的部分。看到这部分,其实很容联想到我们在LR中自己加入交叉特征的部分。

但是需要注意的是,这里有点像暴力求解一样,忽视或者说省去了人工先验的部分,直接做到了所有特征之间的交叉,然后去求解对应的参数就可以。

POLY2模型两个问题

但是这样暴力求解存在两个问题:参数量和参数稀疏导致学习困难的问题。

先说参数量的问题,如果我自身特征(未交叉之前)就已经很多了,为n,那么交叉之后就是一个 n*n级别的参数量。极端情况会出现参数的量级比样本量级都大,训练起来及其的困难。

再说参数稀疏的问题。互联网数据通常使用one-hot编码除了类别型数据,从而使特征向量极度稀疏,POLY2模型做无选择的特征交叉,使得特征向量更加的稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。

我自己理解的时候感觉这个很像是NLP中OOV情况。

FM模型

面对这两种问题,FM模型怎么解决呢?

FM相比于POLY2模型,主要区别是用两个向量的内积代替了单一权重系数,具体来说,就是FM为每个特征学习了一个隐权重向量。在特征交叉的时候,使用两个特征向量的内积作为交叉特征的权重。

这样其实就解决了上面两个问题。

参数量的问题变为了 kn个参数,因为每个特征对应一个K维度的向量。

其次是参数学习的问题。OOV问题很大缓解,即使当前特征交叉在训练样本中没出现过,但是每个特征已经学到了自己embedding,内积之后是有结果的。这也是为什么FM模型泛化能力强的根本原因。

FM模型如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中涉及到的二阶部分可以通过公式的化简从Kn*n–>kn:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考链接:

文章:

FM算法解析 - 王多鱼的文章 - 知乎 https://zhuanlan.zhihu.com/p/37963267

推荐系统召回四模型之:全能的FM模型 - 张俊林的文章 - 知乎 https://zhuanlan.zhihu.com/p/58160982

代码:

deepctr-torch 大概跑了一遍

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

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

相关文章

ArduPilot开源代码之Aocoda-RC F405V2 Mark4 7“ PNP适配

ArduPilot开源代码之Aocoda-RC F405V2 Mark4 10"适配 1. 源由2. 安装2.1 Installing Ground Station (GCS) software2.2 Autopilot System Assembly Instructions2.3 Loading Firmware2.4 Connect Mission Planner to AutoPilot 3. 配置3.1 Basic System Overview3.2 Fram…

头歌答案--数据持久化(非数据库)

目录 ​编辑 数据持久化&#xff08;非数据库&#xff09; 第1关&#xff1a;数据持久化&#xff08;非数据库&#xff09; 任务描述 多线程、多进程爬虫 第1关&#xff1a;多线程、多进程爬虫 任务描述 Scrapy爬虫基础 任务描述 MySQL数据库编程 第1关&#xff1a;…

如何删除英文键盘ENG

1.打开设置&#xff1a;时间和语言2.选择语言&#xff0c;查看首选列表&#xff0c;如果有多种语言&#xff0c;删除其他的语言就可以&#xff0c;如果只有中文&#xff0c;需要点击添加语言 3.选择安装的语言 这个时候点击英语&#xff0c;在选项中就可以看到它的默认键盘&…

盘点双11!阿里妈妈助这些品牌短视频赢增长!

刚刚&#xff01;一年一度的双11落下帷幕&#xff0c;很多新变化值得回味。 尽管天气在变凉&#xff0c;但市场出现了逐渐回暖的迹象。在此背景下&#xff0c;大量商家特别关心如何在双11打一场漂亮的胜仗。 卖方如何行动&#xff0c;关键在于买方的变化。在阿里妈妈发布的《…

小H靶场学习笔记:DC-2

DC-2 Created: November 10, 2023 3:01 PM Tags: WordPress, git提权, rbash逃逸 Owner: 只会摸鱼 靶场过程 信息收集 扫描存活主机&#xff0c;找到靶机ip&#xff1a;192.168.199.131&#xff08;本机是192.168.199.129&#xff09; 扫描端口开放协议 发现有80端口和77…

通过 Elasticsearch 和 Go 使用混合搜索进行地鼠狩猎

作者&#xff1a;CARLY RICHMOND&#xff0c;LAURENT SAINT-FLIX 就像动物和编程语言一样&#xff0c;搜索也经历了不同实践的演变&#xff0c;很难在其中做出选择。 在本系列的最后一篇博客中&#xff0c;Carly Richmond 和 Laurent Saint-Flix 将关键字搜索和向量搜索结合起…

第23章(下)_索引原理剖析

文章目录 索引实现索引存储B树为什么 MySQL InnoDB 选择 B 树作为索引的数据结构&#xff1f;B 树层高问题关于自增id最左匹配原则覆盖索引索引下推innodb体系结构Buffer poolchange buffer 总结 索引实现 索引存储 innodb 由段、区、页组成。段分为数据段、索引段、回滚段等…

手把手带你创建一个自己的GPTs

大家好&#xff0c;我是五竹。 最近GPT又进行了大升级&#xff0c;这一下又甩了国内AI几条街&#xff0c;具体更新了哪些内容之前的一篇文章中其实已经说过了&#xff1a;ChatGPT 王炸升级&#xff01;更强版 GPT-4 上线&#xff01; 其中最重要的一点就是支持自定义GPT&…

【博士每天一篇文献-算法】Imposing Connectome-Derived Topology on an Echo State Network

阅读时间&#xff1a;2023-11-5 1 介绍 年份&#xff1a;2022 作者&#xff1a;Jacob Morra, Mark Daley 西部大学 期刊&#xff1a;2022 International Joint Conference on Neural Networks (IJCNN) 引用量&#xff1a;3 研究了果蝇连接图的拓扑结构对混沌时间序列预测中回…

IP-guard Webserver view 远程命令执行漏洞【2023最新漏洞】

IP-guard Webserver view 远程命令执行漏洞【2023最新漏洞】 一、漏洞描述二、漏洞影响三、漏洞危害四、FOFA语句五、漏洞复现1、手动复现yaml pocburp发包 2、自动化复现小龙POC检测工具下载地址 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传…

代码随想录算法训练营第18天|513. 找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树

JAVA代码编写 513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示: 二叉树的节点个…

Vue.js 学习总结(3)—— vite 打包图片时报错 Rollup failed to resolve import...

问题 图片依赖&#xff1a; Vite 打包前端项目时图片无法引入&#xff0c;报如下错误&#xff1a; ERROR [vite]: Rollup failed to resolve import "%7BlibeiDanmuKongmu%7D" from "D:/java/workspace/jeecgboot-vue3/src/views/funeral/tombInfo/area.vue?…

《数据结构、算法与应用C++语言描述》-队列的应用-工厂仿真

工厂仿真 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_19Factory simulation/ 问题描述 一个工厂有m台机器。工厂的每项任务都需要若干道工序才能完成。每台机器都执行一道工序&#xff0c;不同的机器执行不同的工序。一台机器一…

13年测试老鸟,稳定性测试要点+性能监控关键指标分析(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、稳定性测试的要…

FlinkSQL聚合函数(Aggregate Function)详解

使用场景&#xff1a; 聚合函数即 UDAF&#xff0c;常⽤于进多条数据&#xff0c;出⼀条数据的场景。 上图展示了⼀个 聚合函数的例⼦ 以及 聚合函数包含的重要⽅法。 案例场景&#xff1a; 关于饮料的表&#xff0c;有三个字段&#xff0c;分别是 id、name、price&#xff0…

录制GIF图,动态图

软件下载链接&#xff1a; https://www.cockos.com/licecap/ 参考链接&#xff1a; https://chat.xutongbao.top/

<C++> stack queue模拟实现

目录 前言 一、stack的使用 1. 接口说明 2. 例题 二、模拟实现stack 三、queue的使用 四、模拟实现queue 五、deque 总结 前言 LIFO stack 1. 栈是一种容器适配器&#xff0c;专门设计用于在后进先出上下文&#xff08;后进先出&#xff09;中运行&#xff0c;其中元素仅从容器…

Linux之基本指令操作

1、whoami whoami&#xff1a;查看当前账号是谁 2、who who&#xff1a;查看当前我的系统当中有哪些用户&#xff0c;当前有哪些人登录了我的机器 3、 pwd pwd&#xff1a;查看我当前所处的目录&#xff0c;就好比Windows下的路径 4、ls ls&#xff1a;查看当前目录下的文件信…

搭建Docker

一、概念 云服务器大家肯定不陌生了&#xff0c;相比较传统物理服务器来说他的价格&#xff0c;个性化的配置服务&#xff0c;节省了很多的运维成本&#xff0c;越来越多的企业以及个人开发者更加的青睐于云服务器。有了属于自己的服务器就可以部署搭建自己个人网站了&#xf…

【博士每天一篇文献-模型】A mechanistic model of connector hubs, modularity and cognition

阅读时间&#xff1a;2023-11-10 1 介绍 年份&#xff1a;2018 作者&#xff1a;Maxwell A. Bertolero, B. T. Thomas Yeo 期刊&#xff1a; nature human behaviour 引用量&#xff1a;180 2 创新点 作者提出了一个机制模型&#xff0c;解释了连接中枢的功能以及其对认知表…