ffm算法
www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf 读书笔记
The effect of feature conjunctions(组合特征) is difficult for linear models(比如LR) to learn because they learn the two weights separately(学习LR模型时,不同的参数是独立学习的).
用于组合特征的两个模型:
1. degree-2 polynomial mappings(Poly2) 二阶多项式
2. FM(factorization machines)算法 ,在上个模型的基础上使用矩阵分解,原模型的每个二次项参数Wi,j都对应两个latent vectors的点积。(Wi,j = <Vi,Vj>, W =VVT ,V的行向量是latent vector, VT的列向量是latent vector,其实就是$V_i,V_j$是$X_i,X_j$隐向量)
二阶多项式模型:

$h(_{j1},_{j2})$ is a function encoding $j_1$ and $j_2$ into a natural number.The naive way to implement $h(_{j1},_{j2})$ is to consider every pair of features as a new feature .This approach requires the model as large as O(n^2),which is ususlly impractical for CTR prediction because of very large n.We can solve this problem by hashing $j_1$ and $j_2$.(肯定有很多组合特征$x_ix_j$的系数$w_{ij}$为0,如果采用上述naive的方式,浪费了很多内存)(参照vowpal wabbit)
the model size B is a user-specified parameter.
FM算法中,每一个特征 $X_i$ 对应一个隐变量 $V_i$。(In FMs,every feature has only one latent vector to learn the latent effect with any other features)
field指的是one-hot encoding前的特征,FM算法先做one-hot encoding,然后对编码后的每个特征使用一个latent vector(这里应该错误的),而在FFM算法中,每个特征有多个latent vectors,个数应该是field数-1,组合特征系数等于field下的latent vector的点积.

在FFM算法中,每个field对应一个latent vector,这样一来,该latent vector的元素个数k远小于FM算法中隐向量的维度k.

简单来说,同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等。在FFM中,每一维特征$x_i$,针对其它特征的每一种field $f_j$, 都会学习一个隐向量 $v_{i,f_j}$,因此,隐向量不仅与特征相关,也与field相关,隐向量的数目为one-hot后的特征数 * field数。
假设样本的$n$个特征属于$f$个field,那么FFM的二次项有$nf$个隐向量。而在FM模型中,每一维特征的隐向量只有一个。FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型。
为了使用FFM方法,所有的特征必须转换成“field_id:feat_id:value”格式,field_id代表特征所属field的编号,feat_id是特征编号,value是特征的值。数值型的特征比较容易处理,只需分配单独的field编号,如用户评论得分、商品的历史CTR/CVR等。categorical特征需要经过One-Hot编码成数值型,编码产生的所有特征同属于一个field,而特征的值只能是0或1,如用户的性别、年龄段,商品的品类id等。除此之外,还有第三类特征,如用户浏览/购买品类,有多个品类id且用一个数值衡量用户浏览或购买每个品类商品的数量。这类特征按照categorical特征处理,不同的只是特征的值不是0或1,而是代表用户浏览或购买数量的数值。按前述方法得到field_id之后,再对转换后特征顺序编号,得到feat_id,特征的值也可以按照之前的方法获得。关键在于feat_id如何表示?(hash)
参考:
http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
ffm算法的更多相关文章
- FFM算法解析及Python实现
1. 什么是FFM? 通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分从而进行特征组合的二分类模型. 2. 为什么需要FFM? ...
- FM算法及FFM算法
转自:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html http://blog.csdn. ...
- 个性化排序算法实践(二)——FFM算法
场感知分解机(Field-aware Factorization Machine ,简称FFM)在FM的基础上进一步改进,在模型中引入类别的概念,即field.将同一个field的特征单独进行one- ...
- CTR预估算法之FM, FFM, DeepFM及实践
https://blog.csdn.net/john_xyz/article/details/78933253 目录目录CTR预估综述Factorization Machines(FM)算法原理代码实 ...
- DeepFM算法解析及Python实现
1. DeepFM算法的提出 由于DeepFM算法有效的结合了因子分解机与神经网络在特征学习中的优点:同时提取到低阶组合特征与高阶组合特征,所以越来越被广泛使用. 在DeepFM中,FM算法负责对一阶 ...
- FFM
转载自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/details/77772565 点击率预估算 ...
- Deep Learning专栏--FFM+Recurrent Entity Network的端到端方案
很久没有写总结了,这篇博客仅作为最近的一些尝试内容,记录一些心得.FFM的优势是可以处理高维稀疏样本的特征组合,已经在无数的CTR预估比赛和工业界中广泛应用,此外,其也可以与Deep Networks ...
- 推荐算法之---FM算法;
一,FM算法: 1,逻辑回归上面进行了交叉特征.算法复杂度优化从O(n^3)->O(k*n^2)->O(k*n). 2,本质:每个特征都有一个k维的向量,代表的是每个特征都有k个不可告人的 ...
- 搜索系统核心技术概述【1.5w字长文】
前排提示:本文为综述性文章,梳理搜索相关技术,如寻求前沿应用可简读或略过 搜索引擎介绍 搜索引擎(Search Engine),狭义来讲是基于软件技术开发的互联网数据查询系统,用户通过搜索引擎查询所需 ...
随机推荐
- 关于Java多线程(JAVA多线程实现的四种方式)
Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...
- (5) openssl speed(测试算法性能)和openssl rand(生成随机数)
1.1 openssl speed 测试加密算法的性能 支持的算法有: openssl speed [md2] [mdc2] [md5] [hmac] [sha1] [rmd160] [idea-cb ...
- mysql EXPLAIN Join Types 手册解释 及数据实操
第一部分:名称解释 文档地址 https://dev.mysql.com/doc/refman/5.7/en/explain-output.html EXPLAIN Join Types: The ...
- HTML中复选框的使用方法
<select id="question"> {# 常见问题.ajax用editor.html('1231254')填充#} <option value=&quo ...
- SQL 一次插入多条记录
本文介绍如何快速插入多条数据到数据表中,以满足sql语句学习或项目测试的需要. 本文非原创,是对移步原文的重新整理. 如有以下表格,如图: 1,原始添加记录的方式,sql语句如下: insert in ...
- Android开发——查询/卸载手机里的应用、应用图标创建
1. 获取手机里的所有已安装的应用 以前写过一个SoftProviderUtil工具类,拿出来分享一个.通过PackageManager,不仅可以获取PackageName,判断此进程是否为系统应用, ...
- luogu4093 [HEOI2016/TJOI2016]序列
因为一个变化只会变化一个值,所以 \(dp[i]=max(dp[j])+1,j<i,maxval_j \leq a[i], a[j] \leq minval_i\) 发现跟二维数点问题挺像,树状 ...
- sql模糊查询,解除绑定的单号
--610007570320-610007571319 1000张 delete from (select t.* from (select t1.bill_code, t1.bind_code, t ...
- Python+selenium(多表单、多窗口切换)
多表单切换 案例:在Frame.html文件种定位搜狗搜索页面,进行搜索操作 Frame.html <html> <head> <title>Frame_test& ...
- Linux使用Mutt发送邮件/附件
使用Mutt发邮件极其方便,只需要一条命令即可发送或者批量发送邮件 功能说明:E-mail管理程序. 语 法:mutt [-hnpRvxz][-a<文件>][-b<地址>][- ...