fm算法详解_什么是FM算法?
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算法?相关推荐
- 最短路dijkstra算法详解_最短路径问题---Dijkstra算法详解
1.Dijkstra算法介绍 · 算法起源: · Djkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家E ...
- CORDIC算法详解(一)- CORDIC 算法之圆周系统之旋转模式( Rotation Mode )
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Pieces_thinking/arti ...
- CORDIC算法详解(五)-统一的 CORDIC 算法形式
CORDIC算法详解(五)- 统一的 CORDIC 算法形式 文章目录 CORDIC算法详解(五)- 统一的 CORDIC 算法形式 5 统一的 CORDIC 算法形式 相关参考资料及源码 网上有 ...
- 算法详解_常用算法详解——打印杨辉三角形
杨辉三角,是二项式系数在三角形中的一种几何排列.在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在165 ...
- 机器学习经典算法详解及Python实现--元算法、AdaBoost
http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...
- Word2Vec算法详解(CBOW和skip-gram算法详解)
这里发现了一篇很好的教程,因此就不写了,大家直接下载看就可以了,自己也偷偷懒,这篇文章对word2vec算法思想讲解的很透彻,很浅显易懂,这里对此表示感谢,当然你的英文比较好的情况下,可以直接看英文原 ...
- 深度学习 --- BP算法详解(误差反向传播算法)
本节开始深度学习的第一个算法BP算法,本打算第一个算法为单层感知器,但是感觉太简单了,不懂得找本书看看就会了,这里简要的介绍一下单层感知器: 图中可以看到,单层感知器很简单,其实本质上他就是线性分类器 ...
- python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (
@@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...
- 最短路dijkstra算法详解_图论系列开始填坑--Dijkstra,单源最短路
暑假只有最开始的几天最有意思,考完试玩了几天就感觉到了无聊.抱着想要出去走走的心态,我制定了一个出行路线图,我在1号城市,想去看一看2,3,4,5号城市(每去一个城市都从1号城市出发),一切准备就绪, ...
最新文章
- TensorFlow基础笔记(11) max_pool2D函数 深度学习
- java 循环读取文件_您如何用Java连续读取文件?
- python是软件吗-python运行环境是什么
- 50. Pow(x, n)
- 测试MVC3时关于Model Builder语句的更改
- ubuntu系统配置nijia_在Debian系统中使用backupninja定制备份计划的教程
- 2017.3.12 分割矩阵 失败总结
- sklearn之kmean(无监督聚类)
- Android星座查询实验报告,数字基带传输实验实验报告
- 初入职场,你够聪明不?
- 51c语言编程基础,51单片机c语言编程入门(详讲版)
- 微信小程序公众平台如何生成小程序码
- 计算机报名照片在线修图,网上报名照片处理工具
- tetp服务器怎么上传文件,tftp服务器ip是什么 TFTP服务器怎么设置
- IDEA中阿里p3c代码规范
- 如何安装HDDM,无法使用HDDM
- (附源码)ssm自助游服务系统 毕业设计 250858
- 机器学习相关问题与资源下载。
- [redis] 10 种数据结构详解
- 将 腾讯 QLV文件 转成MP4
热门文章
- 谭安林:大数据在教育行业的研究与应用
- 日语50音图学习笔记
- java试用期考核难吗,试用期一年,但是最近说我考核不合格,准备辞退我来着,那么想知道试用期间被辞退流程都有什么的呢?...
- C++ ~ 深拷贝与浅拷贝图文详解
- 下面的底导航栏应该放在哪个文件里?
- 如何学习SLAM(超级全面)
- Excel对不等的合并单元格进行多列数据求和操作
- 点击链接直接下载的实现
- java企业客户管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- 解决print spooler打印服务停止