机器学习算法系列:FM分解机
在线性回归中,是假设每个特征之间独立的,也即是线性回归模型是无法捕获特征之间的关系。为了捕捉特征之间的关系,便有了FM分解机的出现了。FM分解机是在线性回归的基础上加上了交叉特征,通过学习交叉特征的权重从而得到每个交叉特征的重要性。这个模型也经常用于点击率预估。
因为线性回归中特征都是独立存在的,不存在特征组合项,除非事先人工添加。如果要在线性回归上加入二特征组合,可以如下:
其中,n代表样本的特征数量,x_i是第i个特征的值,w_0,w_i,w_ij是模型参数。
从上面公式可以看出组合特征一共有n(n-1)/2个,任意两个参数之间都是独立,这在数据稀疏的场景中,二次项参数的训练会很困难,因为训练w_ij需要大量非零的x_i和x_j,而样本稀疏的话很难满足x_i和x_j都非零。训练样本不足就很容易导致w_ij不准确,影响模型的性能。
为了解决这个问题,可以引进矩阵分解的技术,这也是为什么叫做分解机的原因。
根据矩阵分解的知识可以知道,一个实对称矩阵W,可以进行如下分解:
类似的,所有的二次项参数w_ij可以组成一个对称阵W,然后进行分解成以上形式,其中V的第j列便是第j维特征的隐向量,也就是说每个w_ij = <v_i,v_j>,这就是FM模型的核心思想,得到:
其中<>表示两个向量的点积。
为了降低参数训练的时间复杂度,我们将二次项进行化简,如下:
由上式可知,v_if的训练只需要样本的x_i特征非0即可,适合于稀疏数据。
同时,我们可以看到对于每个v_if的梯度中求和公式中没有i,所以对i=1,..,N求和项都是一样的,只需要计算一次就可以了,所以要更新所有v_if(共有nk个)的是时间复杂度为O(nk),则FM可以在线性时间训练和预测,是一种非常高效的模型。
对于上述的式子,我们可以使用随机梯度下降的方法求解每个参数,即:
通过求解参数我们就可以得到最终的模型了。另外补充说明一点,对于隐向量V,每个v_i都是x_i特征的一个低维的稠密表示,在实际应用中,数据一般都是很稀疏的Onehot类别特征,通过FM就可以学习到特征的一种Embedding表示,把离散特征转化为Dense Feature。同时这种Dense Feature还可以后续和DNN来结合,作为DNN的输入,事实上用于DNN的CTR也是这个思路来做的。
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/
机器学习算法系列:FM分解机的更多相关文章
- 编程作业1.1——sklearn机器学习算法系列之LinearRegression线性回归
知识点 scikit-learn 对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析. 我们也可以使用scikit-learn的线性回归函数,而不是从头开始实现这些算法. 我们将scik ...
- 分解机(Factorization Machines)推荐算法原理
对于分解机(Factorization Machines,FM)推荐算法原理,本来想自己单独写一篇的.但是看到peghoty写的FM不光简单易懂,而且排版也非常好,因此转载过来,自己就不再单独写FM了 ...
- <转>机器学习系列(9)_机器学习算法一览(附Python和R代码)
转自http://blog.csdn.net/han_xiaoyang/article/details/51191386 – 谷歌的无人车和机器人得到了很多关注,但我们真正的未来却在于能够使电脑变得更 ...
- paper 19 :机器学习算法(简介)
本来看了一天的分类器方面的代码,乱乱的,索性再把最基础的概念拿过来,现总结一下机器学习的算法吧! 1.机器学习算法简述 按照不同的分类标准,可以把机器学习的算法做不同的分类. 1.1 从机器学习问题角 ...
- Computer Science Theory for the Information Age-4: 一些机器学习算法的简介
一些机器学习算法的简介 本节开始,介绍<Computer Science Theory for the Information Age>一书中第六章(这里先暂时跳过第三章),主要涉及学习以 ...
- 机器学习算法与Python实践之(四)支持向量机(SVM)实现
机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 zouxy09@qq.com http://blog.csdn.net/ ...
- ML.NET 示例:推荐之场感知分解机
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
先收藏............ 本文为笔者在学习周志华老师的机器学习教材后,写的课后习题的的编程题.之前放在答案的博文中,现在重新进行整理,将需要实现代码的部分单独拿出来,慢慢积累.希望能写一个机器学 ...
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考 ...
随机推荐
- C++走向远洋——42(项目二,我的数组类,深复制,构造函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- VirtualBox Ubuntu设置静态ip亲测可行
virtualbox重启后ip会自动分配,不固定.项目中需要配置ip地址,因此每次ip换了,需要重新配置和编译. 网上搜罗好几种方法进行配置,尝试下面这种简单并且可行: 步骤一:查看虚拟机网卡 ifc ...
- 记一次苹果APP从账号续费到发布成功的历程
一.一波三折的续费 最近公司开发的苹果APP的SSL证书到期了,计划重新发布一下该APP,已替换即将到期的SSL证书.近几年随着钉钉.企业微信等在线办公软件超级平台的出现,各企业都会选择其中 ...
- Android开发 run的时候出现waiting for debugger的情况,及解决问题
出现原因:不清楚,大概推测是因为缓存没有清除干净 解决方法: 方法一. 重新启动模拟器 好像就点右上角的x符号是没有用的,因为会保存状态,在关闭之后还要点击Cold Boot Now,冷启动,才会把之 ...
- Azure Devops/TFS测试管理(下)
紧接着 上篇 经过上篇折腾,我们已经有了: ①手工测试的流程规范 ②测试用例的管理 对于开发出身的我,我觉得一个项目上线流程应该主要瓶颈只能是开发本身,因为我认为最复杂过程应该就是开发,而肯定不能是测 ...
- node中fs模块 - fs.open() fs.read() fs.write() fs.close()
var fs = require('fs') fs.open('./a.txt', 'a+', function(err, fd) { // 打开文件后 创建缓冲区放置数据 ), // 读取多少字节 ...
- Vue+axios(interceptors) 实现http拦截 + router路由拦截 (双拦截)+ 请求自带loading效果
axios interceptors 拦截器 //interceptors.js // vue axios配置 发起请求加载loading请求结束关闭loading // http request 请 ...
- c:\Windows\system32\rundll32.exe Windows无法访问指定设备、路径或文件,你可能没有适当的权限访问该项目
非常懂如何修改权限的可以尝试,否则老老实实地重新注册的系统的.dll文件 重新注册方法如下: WIN+R下输入命令: cmd /c for %i in (%windir%\system32\*.dll ...
- seo搜索优化教程09 - seo搜索优化外链优化
为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉科技强势推出seo搜索优化教程.此为seo教程第九课 网络营销推广中有句行话,叫做"内容为王,外链为王",可见外链对于 ...
- AX2012/D365 SSRS报表开发
大家好,好久没有做SSRS报表了,近期刚好有做2张,就整理起来供初学者参考. AX中SSRS报表开发的框架,父类非常多,这里跟大家简单分享2种比较常用的场景供大家使用. 1.简单的过滤字段,无特殊过滤 ...