一、背景

  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 一:基础知识介绍的更多相关文章

  1. Nginx基础知识介绍

    Nginx基础知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx概述 Nginx是免费的.开源的.高性能的HTTP和正向/反向代理服务器.邮件代理服务器.以及T ...

  2. TCP_Wrappers基础知识介绍

    1. TCP_Wrappers基础知识介绍 TCP_Wrappers是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件.它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...

  3. Swift Playgrounds for mac基础知识介绍

    Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...

  4. WPF Step By Step -基础知识介绍

    回顾 上一篇我们介绍了WPF基本的知识.并且介绍了WPF与winform传统的cs桌面应用编程模式上的变化,这篇,我们将会对WPF的一些基础的知识做一个简单的介绍,关于这些基础知识更深入的应用则在后续 ...

  5. python基础----基础知识介绍

    一  编程语言的划分       编译型:将代码一次性全部编译成二进制,然后运行. 缺点:开发效率低,不能跨平台(windows与linux) 优点:执行效率高 代表语言:c语言 解释型:当程序开始运 ...

  6. android开发学习---linux下开发环境的搭建&& android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  7. Linux基础知识介绍

    1.Linux知识说明1)文件位置 1)/etc/inittab2)模式介绍 0:挂起模式-不推荐 1:单用户模式-只有管理员可以进入该模式,可以修改root密码,处理有登录权限而没有修改文件的权限问 ...

  8. ABP VNext框架基础知识介绍(1)--框架基础类继承关系

    在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...

  9. ABP VNext框架基础知识介绍(2)--微服务的网关

    ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ...

随机推荐

  1. 关于新版本cube.js 集成preosto 的一个说明

    实际上cubejs cli 是可以使用的,只是官方文档对于dbtype 说明的问题 使用如下命令我们可以创建prestodb 的基本项目   cubejs create -d prestodb myd ...

  2. hasura skor 构建安装

    hasura skor 前边有介绍过是一个挺不错的event trigger 插件,我们可以用来进行事件通知处理 官方有提供构建的方法,但是有些还是会有点问题,所以结合构建碰到的问题,修改下 clon ...

  3. SVN 常用 还原项目

    1.先修改本来两个文件,然后再提交到SVN 2.在日志界面,查看提交的文件,找到对应的版本号 3.找到对应的版本号(这里的版本号是1995,我提交生成的版本号 的前一个版本 才是我未作出修改的版本), ...

  4. Cesium 加载天地图

    网上有很多 就是没说 加载天地图需要开发者秘钥,这个需要去天地图官网申请一个就可以了,下面贴上源码 还有就是Cesium也是需要token的哈 <!DOCTYPE html> <ht ...

  5. SQL基础-子查询&EXISTS&UNION

    一.子查询 1.使用子查询作为计算字段 子查询:嵌套在其他查询中的查询 现在有两个表,student表和teacher表 创建teacher表,并插入数据: CREATE TABLE `teacher ...

  6. linux 关闭主板上的蜂鸣器声音

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/mainboard_speaker_close 在从deepin的 ...

  7. Java-根据经纬度计算距离(百度地图距离)

    最近碰到一个需求,需要根据两个点的经纬度查询两点的距离.感觉以后还会用到,所以小记一波. 第一步:添加Maven依赖. <dependency> <groupId>org.ga ...

  8. 安装OpenStack Queens版本的教程推荐

    为了加深对OpenStack的理解,需要自己分模块安装一次,之前都是用devstack安装,傻瓜式安装虽然方便,但是也减少了我对OpenStack理解的深度. 本人参考如下文档安装成功过 http:/ ...

  9. EMQ 与 mqtt 与 IOT设备

    1.IOT设备的特性 IOT(物联网things of internet)设备和传统的智能设备有什么区别,笔者总结下的IOT设备有如下特点: 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HT ...

  10. How to disable the JSP validation in Eclipse helios?

    java - How to disable the JSP validation in Eclipse helios? - Stack Overflowhttps://stackoverflow.co ...