文档章节

ctr_FM,FFM,deepffm,

o
 osc_0lrxxjv2
发布于 2019/04/15 15:44
字数 1852
阅读 8
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

一. 什么是ctr?    one hot  特征没有大小关系,

ctr即点击率,在推荐系统中,通常是按照ctr来对召回的内容子集进行排序,然后再结合策略进行内容的分发。

二. ctr预估模型的发展。  

ctr预估模型的公式:y = f(x), y的范围为[0,1],表示广告被点击的概率。

1. LR 海量高纬离散特征    LR是一个线性分类器,也就是说会忽略掉特征与特征之间的关联信息,

LR(logistics regression),是ctr预估模型的最基本的模型,也是工业界最喜爱使用的方案。LR的介绍这里就不细说了,介绍的教程随便一搜一大堆。

此时, f(x) = \frac{1}{1+e^{-\theta^{T} X}} ,其中 \theta = (\theta_{0},\theta_{1},\theta_{2}...\theta_{n})

这里,我们定义一下, logsitcs(x) = \frac{1}{1+e^{-x}} , linear(x) = \theta^{T}X 。

则: f(x) = logistics(linear(X))

LR的优势在于处理离散化特征,而且模型十分简单,很容易实现分布式计算。关于LR的变种也有许多,比如Google的FTRL,其实这些变种都可以看成:LR+正则化+特定优化方法。

LR的缺点也很明显,特征与特征之间在模型中是独立的,对于一些存在交叉可能性的特征(比如: 衣服类型与性别,这两个特征交叉很有意义),需要进行大量的人工特征工程进行交叉。虽然模型简单了,但是人工的工作却繁重了很多。而且LR需要将特征进行离散化,归一化,在离散化过程中也可能出现边界问题。这里便为GBDT+LR的方案进行了铺垫。

 

2. GBDT

GBDT,即梯度提升决策树,是一种表达能力比较强的非线性模型。具体模型的介绍,也可以google出一堆教程。所以这里就不做详细的推导了。

此时, f(x) = logstics( gbdt\_tree_{1}(X) + gbdt\_tree_{2}(X) + gbdt\_tree_{3}(X)..)

GBDT的优势在于处理连续值特征,比如用户历史点击率,用户历史浏览次数等连续值特征。而且由于树的分裂算法,它具有一定的组合特征的能力,模型的表达能力要比LR强。GBDT对特征的数值线性变化不敏感,它会按照目标函数,自动选择最优的分裂特征和该特征的最优分裂点,而且根据特征的分裂次数,还可以得到一个特征的重要性排序。所以,使用GBDT减少人工特征工程的工作量和进行特征筛选。

GBDT善于处理连续值特征,但是推荐系统的绝大多数场景中,出现的都是大规模离散化特征,如果我们需要使用GBDT的话,则需要将很多特征统计成连续值特征(或者embedding),这里可能需要耗费比较多的时间。同时,因为GBDT模型特点,它具有很强的记忆行为,不利于挖掘长尾特征,而且GBDT虽然具备一定的组合特征的能力,但是组合的能力十分有限,远不能与dnn相比。

 

3. FM 与 FFM   如果想要更深入的了解(美图团队所写的fm和ffm)  https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html

在LR部分,我们提及到了LR不能自动处理交叉特征。LR是一个线性分类器,也就是说会忽略掉特征与特征之间的关联信息,而FM则是在这个基础上进改进。旨在解决稀疏数据下的特征组合问题.

FM的模型公式为:

f(x) = logstics(linear(X) + \sum_{i=1}^{n}{}\sum_{j=i+1}^{n}w_{ij}{x_{i}x_{j}})

在逻辑斯特函数里面的公式可以看成两部分,一部分是我们所熟悉的线性回归函数,而第二部分则是二次交叉项。所以FM处理特征间二次交叉的能力。

但是二次项权重 w_{ij} 需要我们去存储一个二维矩阵的变量,而因为特征是大规模离散的,这个二维矩阵的维度可能很大。而FM的作者利用矩阵分解的原理,将这个权重矩阵进行分解,即 w_{ij} = <v_{i},v_{j}> 。

则FM的公式变为:

f(x) = logstics(linear(X) + \sum_{i=1}^{n}{}\sum_{j=i+1}^{n}<v_{i},v_{j}>{x_{i}x_{j}})

但是这里,对于特征 x_{i},x_{j},x_{h} , x_{i} 与 x_{j} , x_{i} 与 x_{h} ,都是使用 v_{i} 去和 v_{j} 、 v_{h} 做内积。但是对于不同的特征组合,比如天气与地点,天气与性别,关联的程度是不一样的,都使用同样的向量去与不同的特征做内积,会带来明显的信息损失。所以引出了FFM(field FM)。

FFM的模型公式为:

f(x) = logstics(linear(X) + \sum_{i=1}^{n}{}\sum_{j=i+1}^{n}<v_{if_{j}},v_{jf_{i}}>{x_{i}x_{j}})

fild指的是对于商品的末级品类编码生成了550个特征,这550个特征都是说明商品所属的品类,因此它们也可以放到同一个field中。简单来说,同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等。在FFM中,每一维特征 xi,针对其它特征的每一种field fj,都会学习一个隐向量 Vi f j。因此,隐向量不仅与特征相关,也与field相关。

FM的优点相对于LR在于拥有处理二次交叉特征的能力,而且它是可以实现线性的时间复杂度的(具体看美团的文章),模型训练也十分快。

而FFM则是在FM的基础上,考虑了特征交叉的field的特点,但是也导致它没有办法实现线性的时间复杂度,模型训练要比FM慢一个量级,但是效果会比FM来得更好。

 

 

代码实现:https://blog.csdn.net/guanbai4146/article/details/80139806

4. GBDT+(LR, FM, FFM)

前面提及到了GBDT适合处理连续值特征,而LR,FM,FFM更加适合处理离散化特征。GBDT可以做到一定程度的特征组合,而且GBDT的特征组合是多次组合的,不仅仅是FM与FFM这样的二阶组合而已。同时,GBDT具备一定的特征选择能力(选择最优的特征进行分裂)。

在facebook 2014年的一篇论文中,提及到GBDT+LR的解决方案。即先使用GBDT对一些稠密的特征进行特征选择,得到的叶子节点,再拼接离散化特征放进去LR进行训练。在方案可以看成,利用GBDT替代人工实现连续值特征的离散化,而且同时在一定程度组合了特征,可以改善人工离散化中可能出现的边界问题,也减少了人工的工作量。

而kaggle的ctr预估比赛中,台大的团队参考fb,使用了gbdt+ffm的方案夺冠。

此时GBDT+LR模型的公式为:

X_{new} = X + gbdt(x)'s \ nodes

f(x) = logistics(linear(X_{new}))

 

代码实现:https://www.jianshu.com/p/96173f2c2fb4

 

5. MLR

MLR是由阿里团队提出的一种非线性模型。它等价于聚类+LR的形式。

我们定义:

softmax(X, i, m) = \frac{e^{\mu_{i} X}}{\sum_{j=1}^{m}{e^{\mu_{j}X}}}

则MLR的公式为:

f(x) = \sum_{i=1}^{m}{softmax(X,i,m)}*logistics(linear(X))

相当于将X进行聚类,聚成m类,然后每一个聚类单独训练一个LR。

MLR相对于LR拥有更好的非线性表达能力,算是LR的一种拓展。

但是MLR与LR一样,也需要较大的特征工程处理,而且这个模型本身属于非凸模型,需要预训练,可能出现不收敛的情况。

 deepfm    https://zhuanlan.zhihu.com/p/33479030

nfm  https://zhuanlan.zhihu.com/p/33587540

 

NFFM  https://zhuanlan.zhihu.com/p/38499275

 https://www.youtube.com/watch?v=NV1tkZ9Lq48

 

https://zhuanlan.zhihu.com/p/35046241

https://github.com/mJackie/RecSys

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
【转载】嵌入式开发板iTOP-4412在Ubuntu下配置WIFI方法

本文转自迅为:http://www.topeetboard.com 平台:iTOP-4412开发板 精英版wifi配置 开发板上电启动进入到 Ubuntu 系统后,在开发板的串口里面使用命令“vi /etc/init.d/itop-set” ,如下图:...

歌之王子殿下
2016/02/26
462
0
迅为4412开发板V_4.0 ubuntu 在Android4.4.4的内核下移植wifi

背景:由于厂家迅为的全能版的V4.0底板和V3.5底板的wifi部分有改动,所以需要重新移植wifi 软件基础 :基于迅为提供的全能版V_4.0的Android4.4.4源码编译出来的ubuntu内核之上移植ubuntu文件...

歌之王子殿下
2017/04/10
236
0
那些适合日常使用的开源工具和应用(娱乐篇)

本系列文章将针对办公、设计、娱乐、教育等日常使用场景,进行一些开源工具和应用的推荐,希望能对大家有所帮助。优秀的实在太多,篇幅有限,仅列出部分,发现更多可以利用 OSC 的搜索工具。...

王练
2016/11/29
7.8K
14
轻量级音乐播放器--gejengel

Gejengel 是一个音乐播放器,主要特点是高性能和简单。 主要特性 易用 轻巧 无缝回放 不同的音频输出 (Alsa, Pulseaudio, OpenAL) 通过插件支持 Last.Fm 歌曲记录 可通过dbus进行远程控制...

匿名
2010/07/06
950
0
iPod音乐管理软件--Floola

Floola是一个跨平台的免费非开源程序,可以工作在Linux, Mac OS X和Windows(支持Vista)下,可以识别你的iPod和摩托罗拉手机(只要是支持iTunes的设备)随意交换数据,这样再也不用担心iTunes的...

匿名
2009/03/25
4.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

IntelliJ IDEA简介及jetbrains-agent安装教程

IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、J...

osc_mxz6aybo
17分钟前
13
0
Arraylist翻译分析

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { //序列号UID,代表版本,私有的静态常量 private static final......

osc_bgpugm2v
18分钟前
0
0
深入分析序列化和反序列化原理,终于知道serialVersionUID到底有什么用了

深入序列化和反序列化原理 一个问题引发的思考 什么是序列化和反序列化 为什么需要序列化 序列化的方式 Java序列化 serialVersionUID的作用 serialVersionUID的两种表现形式 Transient关键字...

osc_sw1y4qdg
18分钟前
0
0
039. Nginx 负载均衡

1. 基于反向代理的功能,Nginx 作为负载均衡主要有以下几点理由: 高并发连接。 采用 epoll nio 的形式。 内存消耗少。 使用了大量自带的数据结构(自己设计的)。 数据拷贝采用类零拷贝的形式...

华夏紫穹
20分钟前
12
0
线程的基本概念和线程的使用方法

线程的基本概念 很多人会对程序、进程和线程之间理解比较含糊,在此先给出三者的概念: 程序:是一个指令的集合,意思就是我们为了完成特定的功能而编写的代码。 进程:是指程序的一次静态态执...

osc_t46alvdj
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部