推荐算法 -- FM
一、FM算法(Factor Machine)
1.1 FM背景(因子分解机)
a) CTR预估是竞争广告核心的逻辑之一,在计算广告和推荐系统中,推荐一个商品与否,CTR预估(click-throgh rate)是十分重要的。
注:点击率CTR(click-through rate)和转化率CVR(conversion rate)是衡量广告流量的两个关键指标。
准确的估计CTR、CVR对于提高流量的价值,增加广告收入有重要的指导作用。
预估CTR/CVR,业界常用的方法有
人工特征工程 + LR(Logistic Regression)
GBDT(Gradient Boosting Decision Tree) + LR(Logistic Regression)
FM(Factorization Machine)
FFM(Field-aware Factorization Machine)模型
DSP(Demand Side Platform)
b) 进行CTR评估,除了单特征,还可以用特征组合(Tree系列和FM系列)
https://www.meihua.info/a/72378
1.2 为什么进行FM
1.2.1 特征组合
特征与特征之间有关联,如果直接对特征建模,会忽略这些关联,用交叉特征特高组合的方式。
1.2.2 高维灾难 (One-hot编码产生的稀疏)
One-hot独热编码,又称为一位有效编码,在机器学习算法中,我们常常会遇到分类特征,这些特征值并不是连续的,而是离散的、无序的。就需要进行特征数字化。
进行One-hot编码,主要是采用N位状态寄存寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
One-hot编码是分裂变量作为二进制向量的表示。将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。
可用Sklearn实现。具体;https://www.imooc.com/article/35900
FM优势:首先是特征组合,通过两两特征组合,引入交叉特征,提高模型得分;其次是高维灾难,通过引入隐向量(对参数矩阵进行矩阵分解),完成对特征的参数估计。
1.3 FM用在哪?
我们已经知道了FM可以解决特征组合以及高维稀疏矩阵问题,而实际业务场景中,电商、豆瓣等推荐系统的场景是使用最广的领域,打个比方,小王只在豆瓣上浏览过20部电影,而豆瓣上面有20000部电影,如果构建一个基于小王的电影矩阵,毫无疑问,里面将有199980个元素全为0。而类似于这样的问题就可以通过FM来解决。
1.4 FM的优点
解决特征稀疏的问题,能在非常稀疏的数据情况下进行评估
解决特征组合问题
FM是一个通用模型,能适用于大部分场景
训练速度快,线性复杂度kn
1.4 对特征进行组合
普通的线性模型,我们都是将各个特征独立考虑的,并没有考虑到特征与特征之间的相互关系。但实际上,大量的特征之间是有关联的。最简单的以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。如果我们能将这些有关联的特征找出来,显然是很有意义的。
一般的线性模型为:
从上面的式子很容易看出,一般的线性模型压根没有考虑特征间的关联。为了表述特征间的相关性,我们采用多项式模型。在多项式模型中,特征xixi与xjxj的组合用xixj表示xixj表示。为了简单起见,我们讨论二阶多项式模型。具体的模型表达式如下:
上式中,nn表示样本的特征数量,xixi表示第ii个特征。
与线性模型相比,FM的模型就多了后面特征组合的部分。
1.5 FM具体计算
1.5.1 寻找交叉项
FM表达式的求解核心在于对交叉项的求解。下面是很多人用来求解交叉项的展开式,对于第一次接触FM算法的人来说可能会有疑惑,不知道公式怎么展开的,接下来笔者会手动推导一遍。
设有3个变量(特征)x1 x2 x3,每一个特征的隐变量分别为v1=(1 2 3)、v2=(4 5 6)、v3=(1 2 1),即:
设交叉项所组成的权矩阵W为对称矩阵,之所以设为对称矩阵是因为对称矩阵有可以用向量乘以向量转置替代的性质。
那么W=VVT,即
所以:
实际上,我们应该考虑的交叉项应该是排除自身组合的项,即对于x1x1、x2x2、x3x3不认为是交叉项,那么真正的交叉项为x1x2、x1x3、x2x1、x2x3、x3x1、x3x2。
去重后,交叉项即x1x2、x1x3、x2x3。这也是公式中1/2出现的原因。
1.5.2 交叉项权值转换
对交叉项有了基本了解后,下面将进行公式的分解,还是以n=3为例,
所以:
wij可记作或,这取决于vi是1*3 还是3*1 向量
1.5.3 交叉项展开式
上面的例子是对3个特征做的交叉项推导,因此对具有n个特征,FM的交叉项公式就可推广为:
我们还可以进一步分解:
所以FM算法的交叉项最终可展开为:
参考:
https://www.cnblogs.com/wkang/p/9588360.html
https://blog.csdn.net/bitcarmanlee/article/details/52143909