在之前介绍的几个模型中,存在这些问题:

  1. LR不能捕捉非线性,只能进行一次的回归预测
  2. GBDT+LR虽然能够产生非线性特征组合,但是树模型不适用于超高维稀疏数据
  3. FM利用二阶信息来产生变量之间的相关性,但是无法适应高阶组合特征,高阶组合容易爆炸

    那么,下面介绍的LS-PLM模型一定程度上缓解了这个问题。

LS-PLM

LS-PLM是阿里巴巴曾经主流的推荐模型,这一篇文章就来介绍一下LS-PLM模型的内容。LS-PLM可以看做是对LR模型的自然推广,它采用的是分而治之的策略。先对样本分片,然后样本分片中运用逻辑回归进行预估。分片的作用是为了能够让CTR模型对不同的用户群体。不同使用场景都具有针对性。先对全量样本进行聚类,然后在对每个分类实施逻辑回归。透漏一下,这里阿里巴巴使用的分片聚类的经验值是12。

论文当中LS-PLM的效果与LR模型效果进行对比,如下图所示。

优势

LS-PLM存在三个优势:

  • 非线性。通过足够的划分区域,LS-PLM可以拟合任何复杂的非线性函数。
  • 可扩展性。与LR模型类似,LS-PLM可以扩展到大量样本和高维特征。在这之上设计了一个分布式系统,可以在数百台机器上并行训练模型。在线产品系统中,每天都会训练和部署几十个具有数千万参数的LS-PLM模型。
  • 稀疏性。模型稀疏性是工业环境下在线服务的一个实际问题。这里展示了采用L1和L2,1正则器的LS-PLM可以实现良好的稀疏性。使得部署更加轻量级,在线推断效率也更高。
  • 端到端的非线性学习能力。挖掘数据中的非线性模式,节省大量人工处理样本和特征工程的过程。

论文基于directional derivatives(方向导数)和quasi-Newton(拟牛顿)方法来解决因为正则项使得目标函数非凸的问题。

数学形式

LS-PLM的数学形式如下面公式所示

\[f(x)=\sum_{i=1}^{m}\pi_i(x)\eta_i(x)
\]

首先用聚类函数\(\pi\)对模型进行分类分片,再用LR模型计算样本在分片中具体的CTR,然后将两者相乘之后求和。公式中的\(m\)就是分片数,可以较好地平衡模型的拟合能力和推广能力。当\(m=1\)时就会退化为普通的逻辑回归。

实际上,LS-PLM采用的softma函数x进行分类,sigmoid函数作为回归。于是公式变成:

\[f(x)=\sum_{i=1}^{m}\pi_i(x)\eta_i(x)=\sum_{i=1}^{m}\frac{e^{u_ix}}{\sum_{j=1}^{m}e^{u_jx}}\frac{1}{1+e^{-w_ix}}
\]

\(\{u_1,...u_m\}\)为聚类函数(分片函数)\(\pi_i\)的参数,\(\{w_1,...w_m\}\)为拟合函数\(\eta_i\)的参数。

优化

由于目标函数中的加入的正则化项\(L_1\),\(L_{2,1}\)都是非平滑函数,所以目标函数也是非平滑的、非凸函数。因为目标函数的负梯度方向并不存在,所以用能够得到f最小的方向导数的方向b作为负梯度的近似值。这里的推导比较复杂,可以看一下原来论文,之后我尽可能用通俗易懂的语言补充这里。

这个\(L_{2,1}\)挺意思的,贴一下它原来的公式:

\[||\Theta||_{2,1}=L_{2,1}=\sum_{i=1}^d\sqrt{\sum_{j=1}^{2m}\theta_{ij}^{2}}
\]

代码

import torch
import torch.nn as nn
import torch.optim as optim class LSPLM(nn.Module):
def __init__(self, m, optimizer, penalty='l2', batch_size=32, epoch=100, learning_rate=0.1, verbose=False):
super(LSPLM, self).__init__()
self.m = m
self.optimizer = optimizer
self.batch_size = batch_size
self.epoch = epoch
self.verbose = verbose
self.learning_rate = learning_rate
self.penalty = penalty self.softmax = None
self.logistic = None self.loss_fn = nn.BCELoss(reduction='mean') def fit(self, X, y):
if self.softmax is None and self.logistic is None:
self.softmax = nn.Sequential(
nn.Linear(X.shape[1], self.m).double(),
nn.Softmax(dim=1).double()
) self.logistic = nn.Sequential(
nn.Linear(X.shape[1], self.m, bias=True).double()
, nn.Sigmoid()) if self.optimizer == 'Adam':
self.optimizer = optim.Adam(self.parameters(), lr=self.learning_rate)
elif self.optimizer == 'SGD':
self.optimizer = optim.SGD(self.parameters(), lr=self.learning_rate, weight_decay=1e-5, momentum=0.1,
nesterov=True) # noinspection DuplicatedCode
for epoch in range(self.epoch): start = 0
end = start + self.batch_size
while start < X.shape[0]: if end >= X.shape[0]:
end = X.shape[0] X_batch = torch.from_numpy(X[start:end, :])
y_batch = torch.from_numpy(y[start:end]).reshape(1, end - start) y_batch_pred = self.forward(X_batch).reshape(1, end - start)
loss = self.loss_fn(y_batch_pred, y_batch)
loss.backward()
self.optimizer.step()
start = end
end += self.batch_size if self.verbose and epoch % (self.epoch / 20) == 0:
print('EPOCH: %d, loss: %f' % (epoch, loss))
return self def forward(self, X):
logistic_out = self.logistic(X)
softmax_out = self.softmax(X)
combine_out = logistic_out.mul(softmax_out)
return combine_out.sum(1) def predict_proba(self, X):
X = torch.from_numpy(X)
return self.forward(X) def predict(self, X):
X = torch.from_numpy(X)
out = self.forward(X)
out[out >= 0.5] = 1.0
out[out < 0.5] = 0.0
return out

参考

Learning Piece-wise Linear Models from Large Scale Data for Ad Click Predict

Github:hailingu/MLFM

LS-PLM学习笔记

推荐系统实践 0x0e LS-PLM的更多相关文章

  1. 协同滤波 Collaborative filtering 《推荐系统实践》 第二章

    利用用户行为数据 简介: 用户在网站上最简单存在形式就是日志. 原始日志(raw log)------>会话日志(session log)-->展示日志或点击日志 用户行一般分为两种: 1 ...

  2. zz京东电商推荐系统实践

    挺实在 今天为大家分享下京东电商推荐系统实践方面的经验,主要包括: 简介 排序模块 实时更新 召回和首轮排序 实验平台 简介 说到推荐系统,最经典的就是协同过滤,上图是一个协同过滤的例子.协同过滤主要 ...

  3. 推荐系统实践 0x07 基于邻域的算法(2)

    基于邻域的算法(2) 上一篇我们讲了基于用户的协同过滤算法,基本流程就是寻找与目标用户兴趣相似的用户,按照他们对物品喜好的对目标用户进行推荐,其中哪些相似用户的评分要带上目标用户与相似用户的相似度作为 ...

  4. 推荐系统实践 0x0b 矩阵分解

    前言 推荐系统实践那本书基本上就更新到上一篇了,之后的内容会把各个算法拿来当专题进行讲解.在这一篇,我们将会介绍矩阵分解这一方法.一般来说,协同过滤算法(基于用户.基于物品)会有一个比较严重的问题,那 ...

  5. 推荐系统实践 0x09 基于图的模型

    用户行为数据的二分图表示 用户的购买行为很容易可以用二分图(二部图)来表示.并且利用图的算法进行推荐.基于邻域的模型也可以成为基于图的模型,因为基于邻域的模型都是基于图的模型的简单情况.我们可以用二元 ...

  6. Spark推荐系统实践

    推荐系统是根据用户的行为.兴趣等特征,将用户感兴趣的信息.产品等推荐给用户的系统,它的出现主要是为了解决信息过载和用户无明确需求的问题,根据划分标准的不同,又分很多种类别: 根据目标用户的不同,可划分 ...

  7. 基于Neo4j的个性化Pagerank算法文章推荐系统实践

    新版的Neo4j图形算法库(algo)中增加了个性化Pagerank的支持,我一直想找个有意思的应用来验证一下此算法效果.最近我看Peter Lofgren的一篇论文<高效个性化Pagerank ...

  8. 推荐系统实践 0x05 推荐数据集MovieLens及评测

    推荐数据集MovieLens及评测 数据集简介 MoiveLens是GroupLens Research收集并发布的关于电影评分的数据集,规模也比较大,为了让我们的实验快速有效的进行,我们选取了发布于 ...

  9. 推荐系统实践 0x06 基于邻域的算法(1)

    基于邻域的算法(1) 基于邻域的算法主要分为两类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法.我们首先介绍基于用户的协同过滤算法. 基于用户的协同过滤算法(UserCF) 基于用户的 ...

随机推荐

  1. @requestBody 与@requestparam详解

    @RequestParam注解接收的参数是来自于requestHeader中,即请求头.都是用来获取请求路径url 中的动态参数,格式为xxx?username=123&password=45 ...

  2. 邻居子系统1.5 neigh output

    1.5.1 当邻居项不处于NUD_CONNECTD状态时,不允许快速路径发送报文,函数neigh_resolve_output 用于慢而安全的输出,通常用初始化neigh_ops结构 来实例outpu ...

  3. js-根据日期获取本年所有周日

    /** * 方法 描述 Date() 返回当日的日期和时间. getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象返回一周中的某一天 ( ...

  4. 超强工具集——GitHub 热点速览 Vol.47

    作者:HelloGitHub-小鱼干 本周 GitHub 趋势榜精彩至极,先是 JetBrains 开源的图像渲染引擎 Skia 有了 Java 封装,一开源便获得 500+ star,再是支持开发者 ...

  5. python3处理csv文件

    1. 基础语句 1.1 文件的读取 如果需要读取一行数据如下表1所示,那么需要读取域名下面的数据,便使用如下代码: with open('A.csv','rb') as csvfile: reader ...

  6. 有什么好用的Mac数据恢复软件

    对于第一次上手苹果电脑的人来说,使用起来难免有点小难受,因为对苹果电脑操作系统不熟练,发生误删数据的事情也是屡见不鲜. 那么对于这种情况我们该怎么办呢?不用担心,今天小编就为大家推荐一款好用的苹果数据 ...

  7. FL Studio录制面板知识讲解

    FL Studio录制面板可以设置与录制有关的选项,它还有一个用来设置音符对齐的全局吸附选择器.刚接触水果这款音乐制作软件的同学通常不是很清楚这里的知识的,下面小编就给大家讲解一下. 1.首先,我们来 ...

  8. 关于ABBYY的常见问题与解答

    问:ABBYY的版本那么多,我不知道哪款是我需要的.可不可以帮助我选择? 答:您可在此查看不同版本的功能介绍与版本对比,选择适合自己的版本即可. 查看ABBYY FineReader 15功能:查看A ...

  9. 关于Linux虚拟机连接不上网络的问题

    前阵子自学Linux(版本是CentOS6 -VMware ),因为连不上网的问题搁置了一段时间,昨天又重新拾起来,花了一下午时间终于搞定.下面说几点,给自己学习历程一个记录,也希望能帮到其他初学者. ...

  10. maven打包时报No compiler is provided in this environment处理

    系统:macOS 开发工具:Idea 问题描述:在idea中执行mvn clean install时报No compiler is provided in this environment. Perh ...