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算法的更多相关文章

  1. FFM算法解析及Python实现

    1. 什么是FFM? 通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分从而进行特征组合的二分类模型. 2. 为什么需要FFM? ...

  2. FM算法及FFM算法

    转自:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html http://blog.csdn. ...

  3. 个性化排序算法实践(二)——FFM算法

    场感知分解机(Field-aware Factorization Machine ,简称FFM)在FM的基础上进一步改进,在模型中引入类别的概念,即field.将同一个field的特征单独进行one- ...

  4. CTR预估算法之FM, FFM, DeepFM及实践

    https://blog.csdn.net/john_xyz/article/details/78933253 目录目录CTR预估综述Factorization Machines(FM)算法原理代码实 ...

  5. DeepFM算法解析及Python实现

    1. DeepFM算法的提出 由于DeepFM算法有效的结合了因子分解机与神经网络在特征学习中的优点:同时提取到低阶组合特征与高阶组合特征,所以越来越被广泛使用. 在DeepFM中,FM算法负责对一阶 ...

  6. FFM

    转载自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/details/77772565 点击率预估算 ...

  7. Deep Learning专栏--FFM+Recurrent Entity Network的端到端方案

    很久没有写总结了,这篇博客仅作为最近的一些尝试内容,记录一些心得.FFM的优势是可以处理高维稀疏样本的特征组合,已经在无数的CTR预估比赛和工业界中广泛应用,此外,其也可以与Deep Networks ...

  8. 推荐算法之---FM算法;

    一,FM算法: 1,逻辑回归上面进行了交叉特征.算法复杂度优化从O(n^3)->O(k*n^2)->O(k*n). 2,本质:每个特征都有一个k维的向量,代表的是每个特征都有k个不可告人的 ...

  9. 搜索系统核心技术概述【1.5w字长文】

    前排提示:本文为综述性文章,梳理搜索相关技术,如寻求前沿应用可简读或略过 搜索引擎介绍 搜索引擎(Search Engine),狭义来讲是基于软件技术开发的互联网数据查询系统,用户通过搜索引擎查询所需 ...

随机推荐

  1. ssh 非root用户互信

    之所以要把这个记录下来 是因为它的确和root用户不一样root用户 不需要改动什么权限问题  只要生成私钥/公钥对 即可 但是一样的操作在普通用户上就出了问题了 折腾了老半天 ssh-keygen ...

  2. vs2010的资源视图中,对话框显示数字的解决方法之一

    以上是不正常显示. 我这次遇到该问题的原因是资源名IDD_DLG_INTENSITY重复定义导致的, 所以在resource.h文件中去除重复定义就好了. 正常应该显示DD_XXX,如下图所示

  3. Windows下使用ffmpeg与java实现截取视频缩略图

    [ffmpeg.exe可执行文件获取]: 网上搜索后得到编译好的ffmpeg文件,下载地址:http://download.csdn.net/source/453719 [安装]: 将下载的文件解压, ...

  4. 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

    假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少? #include <stdio.h> int main(){ , b = , c = ; print ...

  5. SQL 语句解决实际问题

    在项目开发过程中,遇到数据库的查询问题 一.查询某表字段的信息 select * from syscolumns SELECT object_id('TB_KYChildProject') selec ...

  6. windows中彻底卸载mysql

    1)停止MySQL服务 打开控制面板→管理工具→服务(找到MySQL) 2)卸掉mysql server 打开控制面板→程序与功能→找到mysql server然后卸载 3)将mysql目录下的安装文 ...

  7. Oracle数据库的基本使用

    1.Linux安装  (略) 2.Oracle数据库监听命令: 监听状态:$lsnrctl status 启动监听:$lsnrctl start 关闭监听:$lsnrctl  stop 重载监听:$l ...

  8. Go:获取命令行参数

    一.Low B 方式 package main import ( "fmt" "os" ) func main() { fmt.Println("命令 ...

  9. MySQL教程之存储过程与函数

    存储程序分为存储过程和函数 可以使用CALL来调用存储过程,只能输出变量返回值.存储过程可以调用其他存储过程 函数可以从语句外调用,也能返回标量值 什么是存储过程? 简单的说,就是一组SQL语句集,功 ...

  10. 解决每次打开pycharm直接进入项目的方法