什么是CTR
Click-Through-Rate(点击通过率)用户点击某个广告的概。我是渣渣辉。。。
说人话就是:预测一个广告会不会被点击,可以当做一个二分类问题
好做吗?不太容易,主要是特征层面的问题
什么算法合适呢?咱们主要唠FM系列
最早用线性模型来做,看起来十分简单,却不太好用!
线性模型单独考虑特征和权重之前的关系,没有组合信息
(例如哈尔滨烤冷面,俩特征分别是:哈尔滨,烤冷面,组合起来才是那个味)
特征工程:不就是搞特征嘛,我就使劲想哪些能组合,整合上去
一般数据挖掘问题也确实都是偏人工的,但是推荐系统中,特征指标太多了,
人工做特征工程这个事也太麻烦了,而且人是善变的!
利用树模型来做,树模型本身就有特征选择的功能,再结合集成算法
二项式特征我全要,穷举所有可能组合都往上整
(行是行,但是数据层面会遇到一些问题,一会举例)
FM算法(Factorization Machine),解决了特征层面的问题
可以先来想一想,推荐系统中涉及的数据会有什么样的特点呢?
特征带来的问题
用户的特征,商品的特征,行为的特征,能有的信息实在太多了
不仅特征维度高,主要还涉及很多离散型特征,通常都用one-hot来处理
编码后的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/a3c13cff4bad76f226b3296e55f0deb3.png)
你以为这就完了?咱们刚才不是说要考虑特征之间的组合嘛。。。
(如果仅考虑二阶情况,这特征量都有点吓人了)
如何解决高维且非常稀疏的特征?
还记得特征组合的意义吧:(宅男,游戏)(中年人,保健品)
二阶多项式:
![](https://i-blog.csdnimg.cn/blog_migrate/c7cab5e6d2a7e201def69742fa7982a5.png)
前面还是普通的线性模型,只不过多了二阶的部分
目的肯定是要求解权重参数,你也肯定知道要用梯度下降,有没有啥问题?
参数量有多少呢?线性的还好,但是二阶的出现了平方项
二阶多项式:
一般难道的特征本来都很稀疏了,二阶得啥样?那不更稀疏了嘛!
要训练权重参数,二阶的地方必须要两个特征都非零才可以!
先来看个定理
N阶实对阵矩阵可以分解为:
(PCA课里曾说过的对角化)
![](https://i-blog.csdnimg.cn/blog_migrate/38c2e358897982cd92a54fa080a5f116.png)
想一想咱们的二阶权重参数矩阵:
(同样是对称阵,公式为一半)
![](https://i-blog.csdnimg.cn/blog_migrate/5328b9106d51ee17aa6e3b76dd01281a.png)
如果对W进行分解:
(其中的向量V到底表示什么呢?)先来看个定理
![](https://i-blog.csdnimg.cn/blog_migrate/be33bf0f15795efa2f7cdf63140907fa.png)
Xi与Xj的二项系数其实就它俩各自的隐向量的内积,即:
![](https://i-blog.csdnimg.cn/blog_migrate/c77bf03c563641fbf638608cabf4ec71.png)
隐向量表示什么呢?向量的维度如何定义呢?
可以把隐向量当做是潜意识特征,比如宅男打游戏的向量表示,维度通常较低
求解过程
重点还是在二阶:
![](https://i-blog.csdnimg.cn/blog_migrate/85bcdbab7e678cc0bbb2cd511b01bc1c.png)
借鉴:
![](https://i-blog.csdnimg.cn/blog_migrate/c603097030c7206665a58c3778b54019.png)
从而:
![](https://i-blog.csdnimg.cn/blog_migrate/71a1d26a07fda1b74198a457841e6bcc.png)
其实也就是对称阵W的上半部分
求解过程
原式:
![](https://i-blog.csdnimg.cn/blog_migrate/15cce1bb5ee9def1bbb354ab2180cac5.png)
内积展开:
k表示隐向量的维度
![](https://i-blog.csdnimg.cn/blog_migrate/208e20e5e0c521995148f7a3b12fd8bb.png)
合并同类项:
![](https://i-blog.csdnimg.cn/blog_migrate/eecd9eb5df2537d9924d353ccfd0b2f6.png)
合并成平方项:
![](https://i-blog.csdnimg.cn/blog_migrate/a4d6bd5a8659e2f331760f106c5c321d.png)
总结一下
原公式二阶项复杂度o(n^2),现在只需要kn(n个隐向量,维度为k)
V如何表示出来的呢?好像还得预训练,挺麻烦个事,一会咱们直接DeepFM
特征组合较多的时候,自然会想到一个好兄弟:神经网络!
接下来咱们瞅瞅DeepFM是干啥的
FM融合到神经网络中
迪哥真理:不管啥算法,但凡用深度学习做,都更简单了
整体架构:FM+DNN
embedding是FM重点
还是要进行特征组合
![](https://i-blog.csdnimg.cn/blog_migrate/00faf51ccbfdc39541e22a7c5aff57cc.png)
输入层
输入的数据长什么样:
![](https://i-blog.csdnimg.cn/blog_migrate/18f610db009b4e3e92588243141ad39e.png)
Field表示一个特征,因为one-hot把特征展开了,所以一个filed有多个值
因为一会要做embedding,传入的并不是实际数据,而是索引
例如(男生/女生;哈尔滨/沈阳/长春;打篮球/不打篮球)
(男生,哈尔滨,打篮球:特征索引为 0,2,5;特征值为1,表示取当前特征)
Embedding层
其实是设计多组权重
其中包括了一阶和二阶
权重参数就是embedding
源码见!
![](https://i-blog.csdnimg.cn/blog_migrate/58aa3cbe18cc88409d5f9d93242396a6.png)
DNN层
就是传统神经网络
全连接就搞定了
最终输入sigmoid结果
输出:
![](https://i-blog.csdnimg.cn/blog_migrate/4cc674973719c38fb9f264186e31fd56.png)