FM 模型
在点击率预估任务中,原始数据集 大概是这种情况
点击 | 性别 | 地区 | 频道 |
---|---|---|---|
1 | 男 | 天津 | 相声 |
0 | 女 | 甘肃 | 体育 |
1 | 女 | 云南 | 电视剧 |
将字符串输入到模型中肯定是不现实的,因此对类别型属性做 one-hot 处理
点击 | 性别=男 | 性别=女 | 地区=天津 | 地区=甘肃 | 地区=云南 | 频道=相声 | 频道=体育 | 频道=电视剧 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
这将会把数据集变得异常稀疏且庞大,
在某次任务中,在前一万条数据中,300维的原始数据就被扩充到将近10万维,
整理完300万条数据会发现扩充到了近120万维
线性回归/逻辑回归
线性回归
逻辑回归
这种传统而简单粗暴的方式简单实用,并且在很多生产环境中,确实就是这么做的,
但是这种模型只考虑了但一向特征自身对结果的影响性(权重*特征值求和),而 忽略了特征组合 对结果的影响
比如 < 地区=天津,频道=相声 >
或者 < 性别=女,频道=电视剧 >
等组合
二阶多项式核 SVM
既然 LR 们对特征的态度都是单打独斗性质的,那让特征两两组合手牵手不就考虑了特征组合因素了吗
在大部分数据中,两个特征值的乘积往往是0(两个特征都是1才会被学习到),
这就导致 Wij 这个权重项在大多数训练中都是无效的,没有被学习到,
因此这个模型 泛化能力差 (在生产环境下遇到xi * xj = 1 时就懵了)
因子分解机模型
弃用 SVM 的原因就是因为无法有效学习特征组合的权重,因为这个权重在训练的时候被太多的双0样本屏蔽掉了,因此就要选择方法去攻克这一问题
(下面公式推导在附录1)
根据数学性质运算将二次项再次化简
也就是说,现在我们只要训练向量 v 即可完成学习,并且只要 xi 不为0就可以有效学习(之前可是xi,xj都为1才是有效训练)
DeepFM,与深度学习的结合
神将网络模型可以你和任意曲线,随着训练平台的普及以及算力的不断增强,将神经网络模型与FM模型结合效率将会大大提升
在这里我们引入Field 这个概念
所谓 Field 即特征大类,比如:用户开的车型
,用户性别
,用户喜欢的明星
,用户性别
等
而用户性别=男
作为 one hot 之后的 feature,即特征
要知道,Field之间做降维是无意义的,再或者说v应该只与本 Field 内的特征相关,v也叫做Field 的 embedding向量
在 embedding 之后 无论Field 被 onehot 到多少维,最终都会以一个 k维的向量进行表示
embedding 本质上是个全连接的网络
如网络模型图所示,在得到向量v 之后,就可以进行 FM 模型的学习,是 0次项,1次项,2次项的求和,是一个数值
embedding之后还会传入 隐藏层,进行神经网络(DNN)的训练,最终输出的神经元只有一个,即也是分数值
最后将 FM 模型结果,与DNN的数值求和,通过sigmoid函数激活,得到最后预测值
附录1
从公式
到公式
https://www.jianshu.com/p/e7b2d53ec42b
https://www.codercto.com/a/69752.html