FM(Factor Machine, 因子分解机)算法是一种基于矩阵分解的机器学习算法,是为了解决大规模稀疏数据中的特征组合问题。

不同于传统的线性模型LR(Logistic Regression),其认为每个特征都是独立的。在FM中,考虑到特征之间的的交互作用,并对特征进行交叉组合。

FM的二阶多项式回归模型如下:

右式中的前两项就是简单的线性回归;第三项是交叉项,即特征两两组合,那么一共有n(n-1)/2个组合特征,从而建立起了特征和结果直接的非线性关系。

由于样本数据本来就很稀疏,即大部分xi和xj都为0,那么能够满足xi和xj都为0的样本就更少了。因此这样的话,导致对交叉项的参数wij估计的不充分,严重影响模型预测的效果以及模型的稳定性。那么,如何既能降低数据稀疏给模型性能带来的不良影响,同时又能有效地解决二阶交叉项参数的学习问题呢?这里使用的方法就是进行矩阵分解。

这里举一个用户给商品打分的例子,如左表打分矩阵所示。可以分解为一个用户矩阵和商品矩阵,这样的到的两个矩阵就不稀疏了。用户A对于商品W的喜好就可以直接通过用户A对应的行向量[1.2, 0.8]乘W对应的列向量[1.5, 1.7]’计算得到。

通过上述思想,我们就可以对交叉参数矩阵W进行矩阵分解,将交叉项参数W分解为:

其中n为特征的维数,k为隐向量的维数。经过了矩阵分解,那么每个交叉项系数wij就可以用隐向量的内积来表示,得到了如下公式:

这样需要学习的参数大大减少了,从n*n减少到了k*n,而k<>

从直观上看FM算法的复杂度为O(kn^2),但经过化简得到下式,可以将算法复杂度降到O(kn)。

同LR一样,FM也可以利用SGD来训练模型,其中模型中参数梯度计算的方法如下:

fm算法详解_什么是FM算法?相关推荐

  1. 最短路dijkstra算法详解_最短路径问题---Dijkstra算法详解

    1.Dijkstra算法介绍 · 算法起源: · Djkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家E ...

  2. CORDIC算法详解(一)- CORDIC 算法之圆周系统之旋转模式( Rotation Mode )

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Pieces_thinking/arti ...

  3. CORDIC算法详解(五)-统一的 CORDIC 算法形式

    CORDIC算法详解(五)- 统一的 CORDIC 算法形式 文章目录 CORDIC算法详解(五)- 统一的 CORDIC 算法形式 5 统一的 CORDIC 算法形式 相关参考资料及源码   网上有 ...

  4. 算法详解_常用算法详解——打印杨辉三角形

    杨辉三角,是二项式系数在三角形中的一种几何排列.在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在165 ...

  5. 机器学习经典算法详解及Python实现--元算法、AdaBoost

    http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...

  6. Word2Vec算法详解(CBOW和skip-gram算法详解)

    这里发现了一篇很好的教程,因此就不写了,大家直接下载看就可以了,自己也偷偷懒,这篇文章对word2vec算法思想讲解的很透彻,很浅显易懂,这里对此表示感谢,当然你的英文比较好的情况下,可以直接看英文原 ...

  7. 深度学习 --- BP算法详解(误差反向传播算法)

    本节开始深度学习的第一个算法BP算法,本打算第一个算法为单层感知器,但是感觉太简单了,不懂得找本书看看就会了,这里简要的介绍一下单层感知器: 图中可以看到,单层感知器很简单,其实本质上他就是线性分类器 ...

  8. python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (

    @@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...

  9. 最短路dijkstra算法详解_图论系列开始填坑--Dijkstra,单源最短路

    暑假只有最开始的几天最有意思,考完试玩了几天就感觉到了无聊.抱着想要出去走走的心态,我制定了一个出行路线图,我在1号城市,想去看一看2,3,4,5号城市(每去一个城市都从1号城市出发),一切准备就绪, ...

最新文章

  1. TensorFlow基础笔记(11) max_pool2D函数 深度学习
  2. java 循环读取文件_您如何用Java连续读取文件?
  3. python是软件吗-python运行环境是什么
  4. 50. Pow(x, n)
  5. 测试MVC3时关于Model Builder语句的更改
  6. ubuntu系统配置nijia_在Debian系统中使用backupninja定制备份计划的教程
  7. 2017.3.12 分割矩阵 失败总结
  8. sklearn之kmean(无监督聚类)
  9. Android星座查询实验报告,数字基带传输实验实验报告
  10. 初入职场,你够聪明不?
  11. 51c语言编程基础,51单片机c语言编程入门(详讲版)
  12. 微信小程序公众平台如何生成小程序码
  13. 计算机报名照片在线修图,网上报名照片处理工具
  14. tetp服务器怎么上传文件,tftp服务器ip是什么 TFTP服务器怎么设置
  15. IDEA中阿里p3c代码规范
  16. 如何安装HDDM,无法使用HDDM
  17. (附源码)ssm自助游服务系统 毕业设计 250858
  18. 机器学习相关问题与资源下载。
  19. [redis] 10 种数据结构详解
  20. 将 腾讯 QLV文件 转成MP4

热门文章

  1. 谭安林:大数据在教育行业的研究与应用
  2. 日语50音图学习笔记
  3. java试用期考核难吗,试用期一年,但是最近说我考核不合格,准备辞退我来着,那么想知道试用期间被辞退流程都有什么的呢?...
  4. C++ ~ 深拷贝与浅拷贝图文详解
  5. 下面的底导航栏应该放在哪个文件里?
  6. 如何学习SLAM(超级全面)
  7. Excel对不等的合并单元格进行多列数据求和操作
  8. 点击链接直接下载的实现
  9. java企业客户管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  10. 解决print spooler打印服务停止