推荐系统 | 基础推荐模型 | 特征交叉 | FM | FFM | PyTorch实现


基础推荐模型——传送门


一、因子分解机

  因子分解机在传统逻辑回归的基础上,加入了二阶部分,使模型具备了进行特征组合的能力 。更进一步,在因子分解机基础上发展出来的域感知因子分解机( Field-aware Factorization Machine, FFM) 则通过加入特征域的概念,进一步加强了因子分解机特征交叉的能力。
在这里插入图片描述

逻辑回归模型表达能力不强的问题,会不可避免地造成有效信息的损失,仅利用单特征而非交叉特征进行判断的情况下,有时不仅是信息损失的问题,甚至会得出错误的结论,比如:“辛普森悖论”。此时,就需要特征交叉。

1.POLY2——二项特征交叉

  针对特征交叉的问题,算法工程师经常采用先手动组合特征,再通过各种分析手段筛选特征的方法,但该方法无疑是低效的。更遗憾的是,人类的经验往往有局限性,程序员的时间和精力也无法支撑其找到最优的特征组合。因此,采用POLY2 模型进行特征的"暴力"组合成了可行的选择。
  POLY2 模型的数学形式如下:
ϕ P O L Y 2 ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n w h ( j 1 , j 2 ) x j 1 x j 2 \phi{POLY2}(w,x)=\sum_{j_1=1}^{n}\sum_{j_2=j_1+1}^{n}w_{h_(j_1,j_2)}x_{j_1}x_{j_2} ϕPOLY2(w,x)=j1=1nj2=j1+1nwh(j1,j2)xj1xj2

可以看到,该模型对所有特征进行了两两交叉(特征 x j 1 x j 2 x_{j_1}x_{j_2} xj1xj2),并对所有的特征组合赋予权重 w h ( j 1 , j 2 ) w_{h_(j_1,j_2)} wh(j1,j2)POLY2 通过暴力组合特征的方式,在一定程度上解决了特征组合的问题。POLY2 模型本质上仍是线性模型,其训练方法与逻辑回归并无区别,因此便于工程上的兼容。
POLY2 模型存在两个缺陷

  1. 在处理互联网数据时,经常采用 one-hot 编码的方法处理类别型数据,致使特征向量极度稀疏, POLY2 进行无选择的特征交叉——原本就非常稀疏的特征向量更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛
  2. 权重参数的数量 n n n直接上升到 n 2 n^2 n2 ,极大地增加了训练复杂度。

2.FM 模型一一隐向量特征交叉

  为了解决 POLY2 模型的缺陷,提出了FM模型。

2.1 数理推导

  FM的原始模型方程为:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < w i , w j > x i x j \hat{y}(x)=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}<w_{i},w_{j}>x_{i}x_{j} y^(x)=w0+i=1nwixi+i=1nj=i+1n<wi,wj>xixj
这个式子的前两项就是一个简单的线性函数。主要分析二阶部分。
  FM的二阶部分学习形式为:
ϕ F M ( w , x ) = ∑ i = 1 n ∑ j = i + 1 n < w i , w j > x i x j \phi{FM(w,x)}=\sum_{i=1}^{n}\sum_{j=i+1}^{n}<w_{i},w_{j}>x_{i}x_{j} ϕFM(w,x)=i=1nj=i+1n<wi,wj>xixj
如果直接按照上面这个公式计算的话,复杂度就是 O ( n 2 ) O(n^2) O(n2)。可以对其进行化解,优化成复杂度为 O ( k n ) O(kn) O(kn)的线性复杂度,推导过程如下:
∑ i = 1 n ∑ j = i + 1 n < w i , w j > x i x j = 1 2 ∑ i = 1 n ∑ j = 1 n < w i , w j > x i x j − 1 2 ∑ i = 1 n < w i , w i > x i x i = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k w i f w j f x i x j − ∑ i = 1 n ∑ f = 1 k w i f , w i f x i x i ) = 1 2 ∑ f = 1 k [ ( ∑ i = 1 n w i f x i ) ( ∑ j = 1 n w j f x j ) − ∑ i = 1 n w i f 2 x i 2 ] = 1 2 ∑ f = 1 k [ ( ∑ i = 1 n w i f x i ) 2 − ∑ i = 1 n w i f 2 x i 2 ] \sum_{i=1}^{n}\sum_{j=i+1}^{n}<w_{i},w_{j}>x_{i}x_{j}\\=\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}<w_{i},w_{j}>x_{i}x_{j}-\frac{1}{2}\sum_{i=1}^{n}<w_{i},w_{i}>x_{i}x_{i}\\=\frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}w_{if}w_{jf}x_{i}x_{j}-\sum_{i=1}^{n}\sum_{f=1}^{k}w_{if},w_{if}x_{i}x_{i})\\=\frac{1}{2}\sum_{f=1}^{k}[(\sum_{i=1}^{n}w_{if}x_i)(\sum_{j=1}^{n}w_{jf}x_j)-\sum_{i=1}^{n}w_{if}^{2}x_{i}^{2}]\\=\frac{1}{2}\sum_{f=1}^{k}[(\sum_{i=1}^{n}w_{if}x_i)^2-\sum_{i=1}^{n}w_{if}^{2}x_{i}^{2}] i=1nj=i+1n<wi,wj>xixj=21i=1nj=1n<wi,wj>xixj21i=1n<wi,wi>x

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
CTR(Click-Through Rate)指的是用户点击广告的概率,是评估广告效果的重要指标之一。CTR预估模型旨在根据用户的历史行为、广告资源及用户特征等多种因素,预测用户点击某一广告的概率,从而提高广告点击率。 Python是一种编程语言,在机器学习和深度学习领域有着广泛的应用。要实现CTR预估模型,可以使用Python中的机器学习库,比如scikit-learn或tensorflow。下面简单介绍一个基于scikit-learn的CTR预估模型实现。 1. 数据准备 CTR预估模型需要大量的样本数据,包括用户历史行为、广告资源及用户特征等多种因素。这些数据应该经过预处理和特征工程,确保数据质量和模型性能。在数据准备过程中,需要将数据集分为训练集、验证集和测试集,来评估模型的训练情况和泛化性能。 2. 特征选择和工程 在CTR预估模型中,特征选择和工程是非常重要的环节。特征选择要考虑特定业务场景下特征的重要性和贡献,常用的方法包括Pearson相关系数、Chi-square等。特征工程则是通过一系列的数据处理和特征提取方法,将原始数据转化为有用信息的过程,如分箱、交叉特征、归一化等。 3. 模型选择和训练 在CTR预估模型中,常见的模型有LR、GBDT、FMFFM等。在具体业务场景中,需要根据数据特点和模型性能选择最合适的模型。在模型训练过程中,需要设置超参数、损失函数、优化器等参数,并根据训练数据迭代更新模型参数,以达到最小化损失函数的目的。 4. 模型评估和优化 在CTR预估模型中,常见的评估指标有AUC、LogLoss、准确率等。在验证集和测试集上,通过评估指标来评估模型的性能,发现模型的不足之处,进一步优化模型。 总之,Python是一种优秀的编程语言,在CTR预估模型实现中具有广泛的应用前景。但要注意数据准备、特征工程、模型训练和评估等环节,从而提高CTR预估模型的效果和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幼稚的人呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值