推荐算法之逻辑回归模型族

目录

 

1.协同过滤算法族的不足

2.逻辑回归算法

3.Poly2算法

4.FM算法

5.FFM


1.协同过滤算法族的不足

之前的协同过滤算法族局限在于,它仅仅关注用户与物品的交互信息(受限于共现矩阵),而忽视了用户,物品,场景点信息,这使得协同过滤算法在进行推荐的时候忽视许多其他有用的信息。机器学习针对这一问题提出了很好的解决办法,我们将根据推荐算法质量逐步介绍一些逻辑回归算法族模型。

2.逻辑回归算法

逻辑回归模型能够利用用户、物品、上下文等多种不同的特征,生产较为“全面”的推荐结果。其数学模型如下:

z=w_0+w_1x_1+w_2x_2+...+w_mx_m

f(z)=\frac{1}{1+e^{-z}}

在逻辑回归中,比如用户的年龄、性别、物品属性、物品描述、当前时间、当前地点等起都可以作为输入的特征x_i,所有特征线性组合以后经过一个sigmoid函数计算其值得推荐的概率。

优化函数:

loss=-\frac{1}{m}\sum_{i=1}^{m}y^{(i)}log\hat{y}^{(i)}+(1-y^{(i)})log(1-\hat{y}^{(i)})

优点:结合了多种特征进行推荐,比较符合人的思维。

缺点:仅仅考虑单一特征,未考虑组合特征。

3.Poly2算法

在正式介绍Poly2模型之前,我们先要搞清楚,什么是组合特征。

科比霍华德纳什保罗-加索尔西部第七
兰多夫康利鲁迪-盖伊马克-加索尔西部第五

若两方球队打比赛,如果单单从个人实力上来看(单一特征),也许科比队的可能就赢了,但是兰多夫与康利在一起搭档时,会爆发出更大的可能性(特征组合),因此兰多夫队胜利。在之前的逻辑回归仅仅考虑了单一特征,而未考虑交叉特征。Poly2算法在逻辑回归的基础上,引入了二阶交叉特征,起数学模型如下所示:

z=w_0+\sum_{i =1}^{m}w_ix_i+\sum_{i=1}^{m-1}\sum_{j=i+1}^{m}w_{i,j}x_ix_j

\hat{y}=\frac{1}{1+e^{-z}}

我们可以发现,Poly2算法改进逻辑回归只考虑单一特征的问题,但是Poly算法也带来了另外一个问题,即数据稀疏的问题。

我们在实际应用场景中,对于类别的数据,我们会将其进行one-hot编码。如下一个简单的例子:

点击性别星期
1星期一
0星期二

 

我们进行one-hot编码将类别数据转为数值型数据,即:

点击星期一星期二星期三星期四星期五星期六星期日
1101000000
0010100000

若我们考虑组合特征,则:

点击星期一星期二星期三星期四星期五星期六星期日点击&星期一点击&星期二...
110100000010 
001010000000 

 

由于ohe-hot编码本身对类别数据就会产生大量的0,特征交叉以后组合特征使得特征数变多了很多,这会引入大量的0造成特征稀疏的问题,更致命的是,很可能导致交叉权重系数w_{i,j}无法更新。以下给出详细推导过程:

z=w_0+\sum_{i =1}^{m}w_ix_i+\sum_{i=1}^{m-1}\sum_{j=i+1}^{m}w_{i,j}x_ix_j

\hat{y}=\frac{1}{1+e^{-z}}

其损失函数依旧是交叉熵,即:

loss=-\frac{1}{m}\sum_{i=1}^{m}y^{(i)}log\hat{y}^{(i)}+(1-y^{(i)})log(1-\hat{y}^{(i)})

我们分别计算权重系数的偏导数:

\frac{\partial l}{\partial w_0}=-\frac{1}{m}\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_0}+\frac{\partial l}{\partial 1-\hat{y}^{(i)}}\frac{\partial 1-\hat{y}^{(i)}}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_0} \\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{\hat{y}^{(i)}}\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot 1 +(1-y^{(i)})\frac{1}{1-\hat{y}^{(i)}}\cdot(-1)\cdot\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot 1 )\\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})

\frac{\partial l}{\partial w_j}=-\frac{1}{m}\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_j}+\frac{\partial l}{\partial 1-\hat{y}^{(i)}}\frac{\partial 1-\hat{y}^{(i)}}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_j} \\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{\hat{y}^{(i)}}\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot x_j +(1-y^{(i)})\frac{1}{1-\hat{y}^{(i)}}\cdot(-1)\cdot\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot x_j )\\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})x_j

\frac{\partial l}{\partial w_{i,j}}=-\frac{1}{m}\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_{i,j}}+\frac{\partial l}{\partial 1-\hat{y}^{(i)}}\frac{\partial 1-\hat{y}^{(i)}}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_{i,j}} \\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{\hat{y}^{(i)}}\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot x_ix_j +(1-y^{(i)})\frac{1}{1-\hat{y}^{(i)}}\cdot(-1)\cdot\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot x_ix_j )\\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})x_jx_j

观察交叉特征的梯度\frac{\partial l}{\partial w_{i,j}},最后推导的结果为:-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})x_jx_j,其中由于组合特征数据的稀疏性x_ix_j大概率为0,进而导致梯度为0,这就会造成在梯度更新的时候无法更新。而FM算法便是针对这个问题进行改进。

4.FM算法

针对Poly2算法存在的交叉特征权重系数梯度无法更新问题,FM提出为每个特征向量计算一个隐特征向量,如下图所示:

Poly2:

 feature1&feature2feature1&feature3feature2&feature3
权重系数w_{1,2}(标量)w_{1,3}w_{2,3}

 

FM:

 feature1&feature2feature1&feature3feature2&feature3

隐特征

向量(k纬)

0.56

0.12

.

.

.

0.34

0.12

0.43

.

.

.

0.87

0.98

0.32

.

.

.

0.45

 

每个交叉特征权重系数为这进行交叉的两个特征内积所得,因此原来的Poly2数学模型为:

z=w_0+\sum_{i =1}^{m}w_ix_i+\sum_{i=1}^{m-1}\sum_{j=i+1}^{m}w_{i,j}x_ix_j

\hat{y}=\frac{1}{1+e^{-z}}

而FM模型数学模型为:

z=w_0+\sum_{i =1}^{m}w_ix_i+\sum_{i=1}^{m-1}\sum_{j=i+1}^{m}<v_i,v_j>x_ix_j

\hat{y}=\frac{1}{1+e^{-z}}

<v_i,v_j>=w_{i,j}。而隐特征向量的实现如下图所示:

即将n\times n权重系数矩阵W用一个n\times k矩阵来表示(因为W是实对称矩阵,只要k足够大,一定存在矩阵V,使其满足W=V^TV),这一步就是矩阵分解的思想,在协同过滤中,将n\times m共现矩阵分解为n\times k用户矩阵和k\times n物品矩阵,这里有异曲同工之妙,即将n\times n交叉特征权重系数矩阵分解为n\times k交叉特征隐向量矩阵,其中隐特征向量的维度为kk<<n)。

现在的数学模型中包含了向量,进一步简化FM的数学模型,将向量中的每个元素都挖出来,简化数学模型:

\sum_{i=1}^{m-1}\sum_{j=i+1}^{m}<v_i,v_j>x_ix_j=\frac{1}{2}(\sum_{i=1}^{m}\sum_{j=1}^{m}<v_i,v_j>x_ix_j-\sum_{i=1}^{m}<v_i,v_i>x_i^2)

解释:我们知道权重系数与交叉特征进行线性组合,最后得到一个标量。观察上图,每个权重系数的是由于一个n\times k矩阵中的两个向量内积所得,而对于一个交叉权重系数矩阵,由于其为实对称矩阵,因此我们在实际的计算中仅仅取上三角部分(对角线上的元素不需要)。而:\sum_{i=1}^{m}\sum_{j=1}^{m}<v_i,v_j>x_ix_j=V^TV,为了取出上三角只要减去其对角线上的元素:

\sum_{i=1}^{m}<v_i,v_i>x_i^2并除以2得到交叉特征与特征线性组合的标量。

我们知道向量的内积就是对应元素相乘求和,即:<v_i,v_j>=\sum_{f=1}^kv_{i,f}\cdot v_{j,f}。因此,进一步优化:

\frac{1}{2}(\sum_{i=1}^{m}\sum_{j=1}^{m}<v_i,v_j>x_ix_j-\sum_{i=1}^{m}<v_i,v_i>x_i^2)\\= \frac{1}{2}(\sum_{i=1}^{m}\sum_{j=1}^{m}\sum_{f=1}^kv_{i,f}v_{j,f}x_ix_j-\sum_{i=1}^{m}\sum_{f=1}^kv_{i,f}^2x_i^2)\\ =\frac{1}{2}\sum_{f=1}^k[(\sum_{i=1}^mv_{i,f}x_i)\cdot (\sum_{j=1}^mv_{j,f}x_j)-\sum_{i=1}^m(v_{i,f}\cdot x_i)^2]\\ =\frac{1}{2}\sum_{f=1}^k[(\sum_{i=1}^mv_{i,f}x_i)^2-\sum_{i=1}^m(v_{i,f}\cdot x_i)^2]

所以,FM最终的数学模型可以写为

z=w_0+\sum_{j =1}^{m}w_jx_j+\frac{1}{2}\sum_{f=1}^k[(\sum_{i=1}^mv_{i,f}x_i)^2-\sum_{i=1}^m(v_{i,f}\cdot x_i)^2]

\hat{y}=\frac{1}{1+e^{-z}}

其损失函数与前面一样,依旧为交叉熵:

loss=-\frac{1}{m}\sum_{i=1}^{m}y^{(i)}log\hat{y}^{(i)}+(1-y^{(i)})log(1-\hat{y}^{(i)})

 

此时我们在去求其偏数:

\frac{\partial l}{\partial w_0}=-\frac{1}{m}\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_0}+\frac{\partial l}{\partial 1-\hat{y}^{(i)}}\frac{\partial 1-\hat{y}^{(i)}}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_0} \\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{\hat{y}^{(i)}}\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot 1 +(1-y^{(i)})\frac{1}{1-\hat{y}^{(i)}}\cdot(-1)\cdot\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot 1 )\\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})

 

\frac{\partial l}{\partial w_j}=-\frac{1}{m}\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_j}+\frac{\partial l}{\partial 1-\hat{y}^{(i)}}\frac{\partial 1-\hat{y}^{(i)}}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial w_j} \\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{\hat{y}^{(i)}}\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot x_j +(1-y^{(i)})\frac{1}{1-\hat{y}^{(i)}}\cdot(-1)\cdot\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot x_j )\\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})x_j

 

\frac{\partial l}{\partial v_{m,n}}=-\frac{1}{m}\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial v_{m,n}}+\frac{\partial l}{\partial 1-\hat{y}^{(i)}}\frac{\partial 1-\hat{y}^{(i)}}{\partial \hat{y}^{(i)}}\frac{\partial \hat{y}^{(i)}}{\partial z}\frac{\partial z}{\partial v_{m,n}} \\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\frac{1}{\hat{y}^{(i)}}\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot \frac{\partial z}{\partial v_{m,n}}+(1-y^{(i)})\frac{1}{1-\hat{y}^{(i)}}\cdot(-1)\cdot\hat{y}^{(i)}(1-\hat{y}^{(i)})\cdot \frac{\partial z}{\partial v_{m,n}} )\\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})\frac{\partial z}{\partial v_{m,n}} \\ =-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})[2(\sum_{I=1}^mv_{i,n}\cdot x_i)\cdot x_n-2(v_{m,n}\cdot x_m)\cdot x_m]

其中,[2(\sum_{I=1}^mv_{i,n}\cdot x_i)\cdot x_n-2(v_{m,n}\cdot x_m)\cdot x_m]只要有一个特征不为0,其值为0的可能性很小(若都为0,我们也不关心,说明两种特征都没激活,无需更新)。这也是隐向量的引入使得FM能够更好第解决数据稀疏性问题。

 

举例来说,在某商品推荐的场景下,样本有两个特征,分别是频道(channel)和品牌(brand),某训练样本的特征组合是(ESPN,Adidas)。在POLY2中,只有当ESPN和Adidas同时出现在一个训练样本中时,模型才能学习到这个组合特征对应的权重;而在FM中,ESPN的隐向量也可以通过(ESPN,Gucci)样本进行更新,Adidas的隐向量也可以通过(NBC,Adidas)样本进行更新,这大幅度降低了模型对数据稀疏性的要求。甚至对于一个从未出现过的特征组合(NBC,Gucci),由于模型之前已经分别学习过NBC和Gucci的隐向量,具备了计算该特征组合权重的能力,这是POLY2无法实现的。相比POLY2,FM虽然丢失了某些具体特征组合的精确记忆能力,但是泛化能力大大提升。

 

5.FFM

FFM算法在FM算法的基础上,又提出了一个类别域的概念,举出下面例子来说:

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值