L2R 一:基础知识介绍
一、背景
l2r可以说是搜索推荐里面很常用的知识了,一直处于一知半解的地步,今天开个博客准备把这些零散的东西系统性整理好,一版就粗糙点了。
二、粗概
前段时间的项目主要和搜索引擎相关,记录下搜索引擎的主题思路,大致就是:召回 --> 粗排 ---> 精排。
一般情况下,召回和粗排会并在一起,例如LUCENE。召回的方法有很多种,常见的有:BM25,TF-IDF等,但不限于这些,用LDA也未尝不可。因为这一阶段是海选,涉及大量数据计算,为了保证时效,这部分的算法一般会选用快捷有效且相对简单的,重头戏都会放在精排阶段,也就是我们要说的L2R(Learning to Rank)。
L2R按照方法类型,主要分为以下三种:pointwise, pairwise以及listwise。具体算法以及相应的类型,可参见wiki中的标记[1]。pointwise更适用于ordinal regression,而后两者更适用于L2R[2]。
三、基本知识
1. bagging 、boosting及stacking 区别[3][8]
1.1 bagging方法也称为自举汇聚法(bootstrap aggregating,bootstraps:名字来自成语“pull up by your own bootstraps”,意思是依靠你自己的资源,它是一种有放回的抽样方法),是在原始数据集中选择S次后(有放回)得到S个新数据集的一种技术,新数据集和原数据集的大小相等,新数据集中可以有重复值出现,也有可能原始数据集中的某些值在新数据集中不会出现。然后利用S个新数据集,将某个学习算法分别作用于每个数据集就得到了S个分类器,最终将这S个分类器ensemble起来就得到最终的结果。算法如:随机森林(random forest)。
1.2 boosting是一种与bagging类似的技术,两者所使用的多个分类器的类型都是一致的,主要的区别就是,boosting的分类器之间是串行训练获得的,每个新分类器都是根据已训练出的分类器的性能来训练,通过几种关注被错分的数据来获得新的分类器。boosting分类的结果是基于所有分类器的加权求和的结果,所以它中分类器的权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度,而bagging中,每个分类器的权重是相等的。算法如:Adaboost(adaptive boosting).
1.3 stacking是一种meta_calssifier,分两步,第一步的做法类似于bagging,首先训练集再划分出两部分(子训练集+子测试集),然后是常用的做法,得到一个弱模型,求得这个弱模型在子预测集及预测集上的预测结果(这个很重要,作为第二步的输入)。利用cross_validation,迭代几次,将每个子集作为测试集得到一遍测试结果,这个作为新训练集的X,Y保持不变。再利用每个弱模型预测测试集的结果,平均后作为新测试集的X,Y保持不变。第二步,更新训练集和测试集的X,重新学习一个分类器。[6]以上就是stacking的第一层,在第二层中,我们以第一层的输出train再结合其他的特征集再做一层stacking。不同的层数之间有各种交互,还有将经过不同的 Preprocessing 和不同的 Feature Engineering 的数据用 Ensemble 组合起来的做法。
[7]
2. 分类树和回归树
决策树主要分为两类:分类树和回归树。
2.1 分类树常用来解决分类问题,比如用户性别、网页是否是垃圾页面、用户是不是作弊等。
2.2 而回归树一般用来预测真实数值,比如用户的年龄、用户点击的概率、网页相关程度等等。
2.3 回归树总体流程类似于分类树,区别在于,回归树的每一个节点都会得到一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值寻找最优切分变量和最优切分点,但衡量的准则不再是分类树中的基尼系数,而是平方误差最小化。也就是被预测错误的人数越多,平方误差就越大,通过最小化平方误差找到最可靠的分枝依据。分枝直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。
3. bias 和variance
链接中说明,bias 相当于模型训练的评价指标,variance则表示了模型的泛化能力[4]。
3.1 bagging 减少 variance, boosting 减少bias,bagging对样本进行不断重新采样和聚合,减少了单个样本对于模型的影响,增加了模型本身的抗干扰能力,所以降低了variance。而boosting是串行叠加训练,不断增加每个样本的影响,对样本的依赖也比较大,这样虽然能很好的拟合训练集,bias就降低了,但是当训练集出现问题时,模型的波动也会比较大,高variance。
四、评价指标
1. NDCG[5]
五、参考文献
1.https://en.wikipedia.org/wiki/Learning_to_rank
2.Hang Li, Learning to Rank, ACML 2009Tutorial.
3.机器学习实战[M].第七章,利用AdaBoost元算法提高分类性能。
4.https://zhuanlan.zhihu.com/p/28769940 https://www.zhihu.com/question/27068705/answer/137487142 http://scott.fortmann-roe.com/docs/BiasVariance.html
5.https://en.wikipedia.org/wiki/Discounted_cumulative_gain
6.https://blog.csdn.net/Mr_tyting/article/details/72957853
7.https://stats.stackexchange.com/questions/18891/bagging-boosting-and-stacking-in-machine-learning
8. Comparison of Bagging, Boosting and Stacking Ensembles Applied to Real Estate Appraisal
L2R 一:基础知识介绍的更多相关文章
- Nginx基础知识介绍
Nginx基础知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx概述 Nginx是免费的.开源的.高性能的HTTP和正向/反向代理服务器.邮件代理服务器.以及T ...
- TCP_Wrappers基础知识介绍
1. TCP_Wrappers基础知识介绍 TCP_Wrappers是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件.它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...
- Swift Playgrounds for mac基础知识介绍
Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...
- WPF Step By Step -基础知识介绍
回顾 上一篇我们介绍了WPF基本的知识.并且介绍了WPF与winform传统的cs桌面应用编程模式上的变化,这篇,我们将会对WPF的一些基础的知识做一个简单的介绍,关于这些基础知识更深入的应用则在后续 ...
- python基础----基础知识介绍
一 编程语言的划分 编译型:将代码一次性全部编译成二进制,然后运行. 缺点:开发效率低,不能跨平台(windows与linux) 优点:执行效率高 代表语言:c语言 解释型:当程序开始运 ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- Linux基础知识介绍
1.Linux知识说明1)文件位置 1)/etc/inittab2)模式介绍 0:挂起模式-不推荐 1:单用户模式-只有管理员可以进入该模式,可以修改root密码,处理有登录权限而没有修改文件的权限问 ...
- ABP VNext框架基础知识介绍(1)--框架基础类继承关系
在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...
- ABP VNext框架基础知识介绍(2)--微服务的网关
ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ...
随机推荐
- 21-ESP8266 SDK开发基础入门篇--C# TCP客户端 , 控制LED亮灭
https://www.cnblogs.com/yangfengwu/p/11192603.html 由于是台式机,,没有插无线网卡...所以呢我就用调试助手监控下数据 后期让WIFI连接路由器的时候 ...
- 微信小程序电影模板
[外链图片转存失败(img-STw401rR-1565101469846)(https://upload-images.jianshu.io/upload_images/11158618-52efd0 ...
- sublime 添加到右键菜单
- jmeter待解决55大问题
客户交付一个性能测试项目,阐述实施流程. 解释5个常用的性能指标的名称与具体含义. 写出5个jmeter中常用函数,并对其中2个举例说明用法. 简述jmeter的工作原理? 什么是集合点?设置集合点有 ...
- 第12组 Alpha冲刺(5/6)
Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...
- 配置docker阿里云加速器
1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通 ...
- HTTP与RPC(Thrift)
什么是RPC 从网络协议来说,Http协议与Rpc同属于应用层, 他们的底层都是tcp协议. RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Tra ...
- CTF SSTI(服务器模板注入)
目录 基础 一些姿势 1.config 2.self 3.[].() 3.url_for, g, request, namespace, lipsum, range, session, dict, g ...
- 剑指offer:平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路分析: 首先要明确平衡二叉树的定义.平衡二叉是左右子树的高度差小于等于1,且左右子树都为平衡二叉树.这里就存在一个递归判断左右子树是否为 ...
- Netty集成Protobuf
一.创建Personproto.proto 创建Personproto.proto文件 syntax = "proto2"; package com.example.protobu ...