【模式识别】Learning To Rank之RankBoost

RankBoost的思想比较简单,是二元Learning to rank的常规思路:通过构造目标分类器,使得pair之间的对象存在相对大小关系。通俗点说,把对象组成一对对的pair,比如一组排序r1>r2>r3>r4,那可以构成pair:(r1,r2)(r1,r3),(r1,r4),(r2,r3)(r3,r4),这样的pair是正值,也就是label是1;而余下的pair如(r2,r1)的值应该是-1或0。这样一个排序问题就被巧妙的转换为了分类问题。近来CV界很多又用这种learning to rank的思想做识别问题(最早应该是这篇《Person Re-Identification by Support Vector Ranking》),也就是把识别转换为排序问题再转换为分类问题。

Pairwise的排序方法主要用RankSVM和RankBoost,这里主要说RankBoost,整体还是一个Boost的框架:

注意其与常规Boost的不同组要是Update的时候,当然数据分布也不同。这里可以看出对于最终的排序值,也就是ranking score,其值是没有实际意义的,相对的顺序才有意义。比如r1和r2最终得分是10分和1分,与r1,r2最终得分是100分和1分的信息量差别并不大,我们能得到的结论都是r1应该排在r2前面。

由于和传统的Boost目标不一样,求解也需要非常巧妙的方法,主要在于定义分类器的Loss函数:

具体的,由于以及我们可以得到分布D的损失:

于是,目标就变成了最小化

至此,传统的Boost线性搜索策略已经可以求解,但还有更巧妙的办法。由于函数:

于是,对于所以[-1 1]范围内的x,Z可以近似为:

其中,这样直接可以Z最小时,此时,于是被转换为最大化|r|的问题。

以下是一段RankBoost的代码:

function [ rbf ] = RankBoost( X,Y,D,T )
%RankBoost implemetation of RankBoost algoritm
%   Input:
%       X - train set.
%       Y - train labels.
%       D - distribution function over X times X, it the form of 2D matrix.
%       T - number of iteration of the boosting.
%   Output:
%       rbf - Ranking Function.

rbf = RankBoostFunc(T);
% w - the current distribution in any iteration, initilize to D
w = D;
for t=1:T
    tic;
    fprintf(‘RankBoost: creating the function, iteration %d out of %d\n‘,t,T);
    WL = getBestWeakLearner(X,Y,w);
    rbf.addWeakLearner(WL,t);
    rbf.addAlpha(WL.alpha,t);
    alpha=WL.alpha;

    %update the distribution
    %eval the weak learnler on the set of X and Y
    h=WL.eval(X);
    [hlen, ~] = size(h);
    tmph = (repmat(h,1,hlen) - repmat(h‘,hlen,1));
    w=w.*exp(tmph.*alpha);
    %normalize w
    w = w./sum(w(:));
    toc;
end
end

一个比较明显的问题是RankBoost需要维持一个非常大的|X|*|X|的矩阵,程序运行十分占内存,经常抛出“Out of memory”的错误。所以诸如

tmph = (repmat(h,1,hlen) - repmat(h‘,hlen,1));

之类的操作不如换成如下方式:

   % tmph = (repmat(h,1,hlen) - repmat(h‘,hlen,1));
    %w=w.*exp(tmph.*alpha);
    [rows, cols] = size(w);
    sumw = 0;
    for r=1:rows
        for c=1:cols
            w(r,c) = w(r,c)*exp((h(r)-h(c))*alpha);
            sumw = sumw + w(r,c);
        end
    end

    %normalize w
    %w = w./sum(w(:));
    w = w./sumw;

(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

【模式识别】Learning To Rank之RankBoost

时间: 2024-10-13 06:29:03

【模式识别】Learning To Rank之RankBoost的相关文章

learning to rank

Learning to Rank入门小结 + 漫谈 Learning to Rank入门小结 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 特征抽取 3.1 人工标注 3.2 搜索日志 3.3 公共数据集 5 模型训练 5.1 训练方法 5.1.1 Pointwise 5.1.2 Pairwise 5.1.3 Listwise 6 效果评估7 参考 6.1 NDCG(Normalized Discounted Cumulative Gain) 6.1.1 定

Learning to rank 介绍

PS:文章主要转载自CSDN大神hguisu的文章"机器学习排序":          http://blog.csdn.net/hguisu/article/details/7989489      最近需要完成课程作业——分布式排序学习系统.它是在M/R.Storm或Spark架构上搭建分布式系统,并使用学习排序Pointwise.Pairwise和Listwise三大类算法实现对微软数据集(Microsoft Learning to Rank Datasets)进行学习排序,这篇

Learning to rank (software, datasets)

Datasets for ranking (LETOR datasets) MSLR-WEB10k and MSLR-WEB30k You’ll need much patience to download it, since Microsoft’s server seeds with the speed of 1 Mbit or even slower. The only difference between these two datasets is the number of querie

Learning to Rank 简介

转自:http://www.cnblogs.com/kemaswill/archive/2013/06/01/3109497.html,感谢分享! 本文将对L2R做一个比较深入的介绍,主要参考了刘铁岩.李航等人的几篇相关文献[1,2,3],我们将围绕以下几点来介绍L2R:现有的排序模型,为什么需要使用机器学习的方法来进行排序,L2R特征的选取,L2R训练数据的获取,L2R训练和测试,L2R算法分类和简介,L2R效果评价等. 1.现有的排序模型 排序(Ranking)一直是信息检索的核心研究问题,

【学习排序】 Learning to Rank 中Listwise关于ListNet算法讲解及实现

前一篇文章"Learning to Rank中Pointwise关于PRank算法源码实现"讲述了基于点的学习排序PRank算法的实现.该篇文章主要讲述Listwise Approach和基于神经网络的ListNet算法及Java实现.包括: 1.基于列的学习排序(Listwise)介绍 2.ListNet算法介绍 3.ListNet算法Java实现 LTR中单文档方法是将训练集里每一个文档当做一个训练实例,文档对方法是将同一个查询的搜索结果里任意两个文档对作为一个训练实例,文档列方法

【学习排序】Learning to Rank中Pointwise关于PRank算法源码实现

最近终于忙完了Learning to Rank的作业,同时也学到了很多东西.我准备写几篇相关的文章简单讲述自己对它的理解和认识.第一篇准备讲述的就是Learning to Rank中Pointwise的认识及PRank算法的实现.主要从以下四个方面进行讲述: 1.学习排序(Learning to Rank)概念 2.基于点的排序算法(Pointwise)介绍 3.基于顺序回归(Ordinal Regression-based)的PRank排序算法 4.PRank算法Java\C++实现及总结 一

Learning To Rank之LambdaMART的前世今生

1.       前言 我们知道排序在很多应用场景中属于一个非常核心的模块,最直接的应用就是搜索引擎.当用户提交一个query,搜索引擎会召回很多文档,然后根据文档与query以及用户的相关程度对文档进行排序,这些文档如何排序直接决定了搜索引擎的用户体验.其他重要的应用场景还有在线广告.协同过滤.多媒体检索等的排序. LambdaMART是Learning To Rank的其中一个算法,适用于许多排序场景.它是微软Chris Burges大神的成果,最近几年非常火,屡次现身于各种机器学习大赛中,

[笔记]Learning to Rank算法介绍:RankSVM 和 IR SVM

之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to Rank的几类常用的方法:pointwise,pairwise,listwise.这篇博客就很多公司在实际中通常使用的pairwise的方法进行介绍,首先我们介绍相对简单的 RankSVM 和 IR SVM. 1. RankSVM RankSVM的基本思想是,将排序问题转化为pairwise的分类问题

(转)Learning to Rank for IR的评价指标—MAP,NDCG,MRR

转自:http://www.cnblogs.com/eyeszjwang/articles/2368087.html MAP(Mean Average Precision):单个主题的平均准确率是每篇相关文档检索出后的准确率的平均值.主集合的平均准确率(MAP)是每个主题的平均准确率的平均值.MAP 是反映系统在全部相关文档上性能的单值指标.系统检索出来的相关文档越靠前(rank 越高),MAP就可能越高.如果系统没有返回相关文档,则准确率默认为0. 例如:假设有两个主题,主题1有4个相关网页,