推荐系统与深度学习(一)——FM模型原理

推荐系统与深度学习(一)——FM模型原理

作者:livan

来源:数据python与算法

前言

推荐系统与深度学习(一)——FM模型原理

推荐系统与深度学习(一)——FM模型原理

简单的机器学习模型构建往往假设各个特征之间相互独立,并基于特征独立进行模型训练,例如:LR、SVM;

但是实际场景中特征往往存在相互关联的,比如:女性更喜欢化妆品类广告,男性更喜欢球类装备广告:

女性—化妆品,男性—球类设备

两者之间的关联性较高。

    因此,关联特征需要考虑引入到模型建设中。

    关联特征在one-hot变化中是按照笛卡尔积的形式呈现的,容易引发高维灾难,比如性别和品类的关联特征如下:

推荐系统与深度学习(一)——FM模型原理

(男/球类)的向量为(女/球类,女/化妆品,男/球类,男/化妆品),one-hot之后为(0,0,1,0),维度指数型增加(4维变成8维):

推荐系统与深度学习(一)——FM模型原理

    为了解决关联特征导致的高维灾难问题,引入了FM模型

FM模型推导

推荐系统与深度学习(一)——FM模型原理

推荐系统与深度学习(一)——FM模型原理

    FM模型从形式上可以看作是:线性模型+关联特征,即在线性模型的基础上,添加了高维关联特征:

推荐系统与深度学习(一)——FM模型原理

    上面公式能看出,wij存在较高的稀疏性,需要找方法解决稀疏问题。

    为了计算wij,对每一个特征分量xi找一个辅助向量vi=(vi1,vi2,......,vik),然后,利用vivjT对wij进行计算,汇总所有的特征可得如下v矩阵,每行为一个特征:

推荐系统与深度学习(一)——FM模型原理

    则wij矩阵的计算为:

推荐系统与深度学习(一)——FM模型原理

    这一思路的基本想法是:将关联之后的特征维度降到k维,计算某一个wij,然后汇总出wij矩阵:

推荐系统与深度学习(一)——FM模型原理

问题来了,如何计算辅助向量vi=(vi1,vi2,......,vik)?

    主要应用的方法为:

推荐系统与深度学习(一)——FM模型原理

    上面关联特征的计算为:

推荐系统与深度学习(一)——FM模型原理

通过上面的计算就能得到FM与辅助向量vi,f的逻辑关系,然后通过梯度递减,即SGD进行数据运算:

推荐系统与深度学习(一)——FM模型原理

最终得到FM的模型:

推荐系统与深度学习(一)——FM模型原理

此时,模型不仅考虑了关联特征,同时解决稀疏问题,并将复杂度降低到与LR模型同一水平。

FM与SVM的比较

推荐系统与深度学习(一)——FM模型原理

推荐系统与深度学习(一)——FM模型原理

    SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量vi、vj,交叉参数就不是独立的,而是相互影响的。

    FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行

    FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量

    线性SVM只有一维特征,不能挖掘深层次的组合特征在实际预测中并没有很好的表现;而多项式SVM正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,这样对于测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。

    笔者认为,算法的精神在于逻辑,代码倒是其次,本文只介绍原理,代码部分,可以自行到网上查询~

◆ ◆ ◆  ◆ 

麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用原价5折的预购价格购买,还是非常划算的:

推荐系统与深度学习(一)——FM模型原理

点击下方小程序即可进入购买页面:


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

推荐系统与深度学习(一)——FM模型原理

猜你喜欢

 麟哥拼了!!!亲自出镜推荐自己新书《数据分析师求职面试指南》

 厉害了!麟哥新书登顶京东销量排行榜!

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 你相信逛B站也能学编程吗

推荐系统与深度学习(一)——FM模型原理

点击阅读原文即可参与当当5折购书活动