https://blog.csdn.net/zynash2/article/details/80029969

FM论文地址:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

工业界传统的LR,由于简单且可解释被广泛使用,但人工特征工程的繁琐操作也是阻碍模型真正效果的主要原因,各类的特征组合需要大量的人工挖掘实验。鉴于此,基于矩阵分解的FM模型被人熟知,它的目标就是解决在稀疏数据的条件下特征组合的问题。本文将详细分析下FM模型的原理。

首先给出FM的目标函数(这里的模型特指二阶的分解模型):

可能有读者会有问题,既然目的是为了组合二阶或者高阶的特征,那为什么模型不直接表达成如下的形式:

既直接学习二阶特征的参数。原因其实很简单,这其实也是分解机模型存在的原因。假设模型中第m维的特征和第n维的特征在样本中(one-hot之后)从未同时为1过,则很明显其交叉特征的参数值必然为0,也就失去了二阶特征的意义。为了克服这种现象,FM是采用了矩阵分解的方式来重新解释交叉特征的关系,如下图所示:

向量v就是每个特征对应的特征向量,其维数由自己确定,真正的二阶参数如公式,就是两个向量的点积。因此,FM也经常被用来作为降维或者是深度神经网络embedding的一种方式,例如FNN、DeepFM等DNN模型,都是采用了FM作为embedding的方式,具体可参考笔者之前的博客。v的值由模型训练本身产生,特征向量的点积就是两个特征的融合参数。为了简化计算(比如用tensorflow搭建FM网络),可以对二阶项做如下的计算:

综上所述,我们可以给出FM在使用sigmod激活,随机梯度下降优化(去掉求和),考虑L2正则且为二分类问题时的训练伪代码:

FM理论上可以学习出n阶特征的关系,但由于2阶以上计算过于复杂,本文只针对二阶FM情况,事实上大部分工业级引用也是二阶为主。而FM也有进阶的模型,像FFM,就是针对field,简单说就是根据加上了slot的条件来做矩阵分解,因此二阶参数会比FM更多,稍显复杂,笔者有时间也会做相应的分析。

---------------------
作者:zynash2
来源:CSDN
原文:https://blog.csdn.net/zynash2/article/details/80029969
版权声明:本文为博主原创文章,转载请附上博文链接!

FM-分解机模型详解的更多相关文章

  1. FM(Factorization Machines)模型详解

    优点 FM模型可以在非常稀疏的数据中进行合理的参数估计,而SVM做不到这点 在FM模型的复杂度是线性的,优化效果很好,而且不需要像SVM一样依赖于支持向量. FM是一个通用模型,它可以用于任何特征为实 ...

  2. ISO七层模型详解

    ISO七层模型详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我刚刚接触运维这个行业的时候,去面试时总是会做一些面试题,笔试题就是看一个运维工程师的专业技能的掌握情况,这个很 ...

  3. 28、vSocket模型详解及select应用详解

    在上片文章已经讲过了TCP协议的基本结构和构成并举例,也粗略的讲过了SOCKET,但是讲解的并不完善,这里详细讲解下关于SOCKET的编程的I/O复用函数. 1.I/O复用:selec函数 在介绍so ...

  4. 机器学习算法系列:FM分解机

    在线性回归中,是假设每个特征之间独立的,也即是线性回归模型是无法捕获特征之间的关系.为了捕捉特征之间的关系,便有了FM分解机的出现了.FM分解机是在线性回归的基础上加上了交叉特征,通过学习交叉特征的权 ...

  5. ASP.NET Core的配置(2):配置模型详解

    在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...

  6. 第94天:CSS3 盒模型详解

    CSS3盒模型详解 盒模型设定为border-box时 width = border + padding + content 盒模型设定为content-box时 width = content所谓定 ...

  7. JVM的类加载过程以及双亲委派模型详解

    JVM的类加载过程以及双亲委派模型详解 这篇文章主要介绍了JVM的类加载过程以及双亲委派模型详解,类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象 ...

  8. 云时代架构阅读笔记六——Java内存模型详解(二)

    承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...

  9. css 06-CSS盒模型详解

    06-CSS盒模型详解 #盒子模型 #前言 盒子模型,英文即box model.无论是div.span.还是a都是盒子. 但是,图片.表单元素一律看作是文本,它们并不是盒子.这个很好理解,比如说,一张 ...

随机推荐

  1. IC卡热复位时序

    热复位(warm reset):在时钟CLK和电源电压VCC处于激活状态的前提下,IC卡收到复位信号时产生的复位. 冷复位过程之后,如果收到的复位应答信号不满足规定,终端将启动热复位并从IC卡获得复位 ...

  2. SuSE Linux Enterprise Server - 软件包下载地址

    官方地址: https://software.opensuse.org

  3. freeswitch黑名单mod_blacklist使用

    freeswitch自带黑名单模块"mod_blacklist",此文只是对该模块简单使用的实例. 最近接到客户投诉有大量骚扰电话,而从源头查不太容易,因此想到的笨方法是将投诉人加 ...

  4. Spring history&Design Philosophy 简单介绍~

    SPRING框架的介绍和历史 Spring Framework是一个开源Java应用程序框架,最初是基于依赖注入(DI)和控制反转(IoC)的原理开发的. Spring Framework已经成长为控 ...

  5. PythonStudy——编程基础 Python Primary

    1.什么是编程语言 语言:  一个事物与另外一个事物沟通的介质 .编程语言是程序员与计算机沟通的介质. 编程: 将人类内识别的语言转化为机器能识别的指令,这种过程就叫做编程. 注:最终这些指令会被转化 ...

  6. live555 交叉编译移植到海思开发板

    本文章参考了.http://blog.csdn.net/lawishere/article/details/8182952,写了hi3518的配置说明.特此感谢 https://blog.csdn.n ...

  7. PySide中QtGui.QFrame的用法

    最近一位同事的出现让我重新正视PySide中designer这个工具的强大之处,通过QtGui.QObject.setGeometry(QtCore.QRect())这个最简单直接的方法可以完成很多复 ...

  8. Docker容器常用命令

    容器是镜像的一个运行实例.两者不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层. 一.创建容器 1.新建容器 docker create:新建一个容器 create命令命令支持的选项十 ...

  9. 测试WCF遇到的一些问题

    win7+iis7 1.localhost访问bad request错误. 主机地址不要指定为127.0.0.1.设置为”全部未分配“. 2.错误 500.19(由于权限不足而无法读取配置文件)的问题 ...

  10. pytorch下的lib库 源码阅读笔记(2)

    2017年11月22日00:25:54 对lib下面的TH的大致结构基本上理解了,我阅读pytorch底层代码的目的是为了知道 python层面那个_C模块是个什么东西,底层完全黑箱的话对于理解pyt ...