对过于稀疏的数据进行优化,以线性回归为例:
原始模型
yhat=w0+∑ni=1wi∗xi (1)
只能对存在的线性关系进行讨论
在实际问题中,以推荐系统为例,很多特征只有同时出现时才有价值,如“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征。
作为改进需要加入交叉项,加入度为2的交叉项之后公式更新为
yhat=w0+∑ni=1wi∗xi+∑n−1i=1∑nj=i+1wij∗xi∗xj (2)
当度增加时,可以向上扩展,使用类似三个四个或是更多数据之间的interaction
这种做法有一个缺陷在于,wij的更新同时依赖于xi和xj两项数据,当其中一项为0时,会导致乘积为0,在进行梯度下降会导致无法对参数wij进行更新,在稀疏数据中这种现象更加普遍
改进
使用两个向量vi和vj的内积作为新的wij,即xi和xj之间interaction的大小
当对其中的某一个参数,如vj进行优化时,会遍历所有的(i,j)对,只要xi和xj同时不为0就会对参数的更新产生作用,而所有的符合要求的(i,j)对会共同对参数的更新产生作用,因为此时参数只固定了一个下标,另一个下标可为任意值,所有的影响进行叠加。
对于之前的wij而言,没有自由度,其更新由唯一的(i,j)对决定,但是在稀疏数据下,往往都为0,无法更新参数
同时若记vi和vj维度为k,则将n2个交叉项参数减少到kn个
(1)式更新为
yhat=w0+∑ni=1wi∗xi+∑n−1i=1∑nj=i+1<vi,vj>∗xi∗xj(3)
形式化
仔细观察会发现,每一个vi其实对应一个数据集中的一个特征,那么得到一个新的矩阵V=(v1;v2;v3...vn),进一步的,VVT=W
FFM
更进一步,提出Filed-aware Factorization Machine
对于类别特征featurei,从中one-hot编码得到的每一个特征都记为一个field, 如特征Day有三种取值
Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”,编码之后使用三个二值特征表示,但是计入同一个field,那么假设one-hot编码之后一条记录的长度是n维,共有f个field,进一步将交叉项的参数减少为f∗n个
对于featurek,对于每一个fieldj都会计算一个向量vkj,在FM模型中,每一维特征的隐向量只有一个。FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型。
记fj 是第 j 个特征所属的field,则(3)更新为
yhat=w0+∑ni=1wi∗xi+∑n−1i=1∑nj=i+1<vi,fj,vj,fi>∗xi∗xj
打完收工