matlab ltri函数,LTR方法总结

PointWise

这种方法没有考虑到排序的一些特征,比如文档之间的排序结果针对的是给定查询下的文档集合,而Pointwise方法仅仅考虑单个文档的绝对相关度;另外,在排序中,排在最前的几个文档对排序效果的影响非常重要,Pointwise没有考虑这方面的影响。

PairWise

Ranking SVM

Ranking SVM将排序问题转化为分类问题,对于一个有序特征序列x1>x2>x3,任意样本可以构造六个序对,其中(x1,x2)、(x2,x3)、(x1,x3) 是正样本,(x2,x1)、(x3,x1)、(x3,x2)是负样本,然后用

SVM训练一个二分类器对这些新样本进行分类。原理非常简单,不再赘述。

RankBoost

点对间正负样本的构造方法和RankingSVM相同,只不过分类方法用了Boost框架

629fdbf2bfc5

RankBoost框架

RankNet

http://www.cnblogs.com/genyuan/p/9788294.html     https://blog.csdn.net/u014374284/article/details/49385065

主要参考这两篇文章整理

对于一个Query的两个相关文档Ui和Uj假设Ui>Uj,通过RankNet网络前向计算分别得到分数Si和Sj,那么RankNet认为Ui>Uj的概率为:

math?formula=P_%7Bij%7D%20%5Cequiv%20P(U_i%20%5Crhd%20U_j)%20%5Cequiv%20%5Cfrac%7B1%7D%7B1%2Be%5E%7B-%5Csigma(s_i-s_j)%7D%7D

进一步得到文档对(Ui,Uj)的交叉熵损失函数:

math?formula=C_%7Bij%7D%20%3D%20-%5Coverline%20P_%7Bij%7DlogP_%7Bij%7D-(1-%5Coverline%20P_%7Bij%7D)log(1-P_%7Bij%7D)

定义Ui比Uj更靠前的概率为:

math?formula=%5Coverline%7BP%7D_%7Bij%7D%3D%5Cfrac%7B1%7D%7B2%7D(1%2BS_%7Bij%7D),将这个概率带入到②中,得到

math?formula=C%3D%5Cfrac%7B1%7D%7B2%7D(1-S_%7Bij%7D)%5Csigma(s_i-s_j)%2Blog(1%2Be%5E%7B-%5Csigma(s_i-s_j)%7D)

该损失函数是具有对称性的,即交换i和j的的位置损失函数不变。

当Sij=1时,如果Si>Sj,有:

math?formula=%5Clim%20%5Climits_%7Bs_i-s_j%5Crightarrow%5Cinfty%7DC%3D%5Clim%20%5Climits_%7Bs_i-s_j%5Crightarrow%5Cinfty%7Dlog%5Cleft(1%2Be%5E%7B-%5Csigma(s_i-s_j)%7D%5Cright)%3Dlog1%3D0

反之则有:

math?formula=%5Clim%20%5Climits_%7Bs_i-s_j%5Crightarrow%5Cinfty%7DC%3D%5Clim%20%5Climits_%7Bs_i-s_j%5Crightarrow%5Cinfty%7Dlog%5Cleft(1%2Be%5E%7B-%5Csigma(s_i-s_j)%7D%5Cright)%3Dlog%5Cleft(e%5E%7B-%5Csigma(s_i-s_j)%7D%5Cright)%3D-%5Csigma(s_i-s_j),也就是说当前结果和实际结果相反时,Si和Sj差值越小,损失函数就越小

梯度下降的迭代公式为:

math?formula=w_k%5Crightarrow%7Bw_k%7D-%5Ceta%5Cfrac%7B%5Cpartial%7BC%7D%7D%7B%5Cpartial%7Bw_k%7D%7D%3D%7Bw_k%7D-%5Ceta%5Cleft(%5Cfrac%7B%5Cpartial%7BC%7D%7D%7B%5Cpartial%7Bs_i%7D%7D%5Cfrac%7B%5Cpartial%7Bs_i%7D%7D%7B%5Cpartial%7Bw_k%7D%7D%2B%5Cfrac%7B%5Cpartial%7BC%7D%7D%7B%5Cpartial%7Bs_j%7D%7D%5Cfrac%7B%5Cpartial%7Bs_j%7D%7D%7B%5Cpartial%7Bw_k%7D%7D%5Cright)

求导:

math?formula=%7B%5Cpartial%20C_%7Bij%7D%20%5Cover%20%5Cpartial%20s_i%7D%20%3D%20%5Csigma%20(%7B1%20%5Cover%202%7D(1-S_%7Bij%7D)-%7B1%5Cover%201%2Be%5E%7B%5Csigma(s_i-s_j)%7D%7D)%20%3D%20-%7B%5Cpartial%20C_%7Bij%7D%20%5Cover%20%5Cpartial%20s_j%7D④ 可知,C对Si的偏导数和C对sj的偏导之和为0

math?formula=%5Clambda_%7Bij%7D%20%3D%20%7B%5Cpartial%20C_%7Bij%7D%20%5Cover%20%5Cpartial%20s_i%7D%20%3D%20%5Csigma%20(%7B1%20%5Cover%202%7D(1-S_%7Bij%7D)-%7B1%5Cover%201%2Be%5E%7B%5Csigma(s_i-s_j)%7D%7D)则有:

math?formula=%5Cbegin%7Balign%7D%7B%5Cpartial%20C%20%5Cover%20%5Cpartial%20w_k%7D%20%26%3D%5Cunderset%7B(i%2Cj)%5Cin%20I%7D%7B%5Csum%7D%5Clambda_%7Bij%7D(%7B%5Cpartial%20s_i%20%5Cover%20%5Cpartial%20w_k%7D-%7B%5Cpartial%20s_j%20%5Cover%20%5Cpartial%20w_k%7D)%20%5C%5C%20%26%3D%5Cunderset%7Bi%7D%7B%5Csum%7D%5Clambda_i%20%7B%5Cpartial%20s_i%20%5Cover%20%5Cpartial%20w_k%7D%5Cend%7Balign%7D

math?formula=%5Clambda_%7Bij%7D可以看做是Ui和Uj之间的作用力,如果Ui相关性大于Uj,那么Uj会给Ui一个大小为

math?formula=%7C%5Clambda_%7Bij%7D%7C的向上的推动力,同理Ui会给Uj一个向下的推动力。

假设集合I中只包含label不同的URL的集合,且每个pair仅包含一次,即Uij和Uji等价,假设I中只包含(Ui,Uj)切Ui相关性大于Uj,也就是I中所有序对都满足Sij>1,则有:

math?formula=%5Clambda_i%20%3D%20%5Cunderset%20%7Bj%3A(i%2Cj)%5Cin%20I%7D%7B%5Csum%7D%5Clambda_%7Bij%7D%20-%20%20%5Cunderset%20%7Bj%3A(j%2Ci)%5Cin%20I%7D%7B%5Csum%7D%5Clambda_%7Bij%7D

因为损失函数Cij是对称函数,根据

math?formula=%5Clambda_%7Bij%7D的公式可以看出它也是对称函数,即

math?formula=%5Clambda_%7Bij%7D%3D%5Clambda_%7Bji%7D,结合④和⑤来看,即可可以理解上式

ListWise

LambdaRank

显然,只关注pair间的正确性是不够的,RankNet无法以NDCG等只关注topk排序结果的指标为优化目标。

629fdbf2bfc5

对于上图中两种排序结果来讲,Error Pair(错误序对数量)1比2多,所以2比1效果好

但是从NDCG的角度来衡量,NDCG1>NDCG2,1比2效果好

因此,在RankNet中得到的

math?formula=%5Clambda_%7Bij%7D中增加一个

math?formula=%5CDelta%20Z_%7Bij%7D

math?formula=%5Clambda_%7Bij%7D%20%3D%20%7B-%5Csigma%20%5Cover%201%2Be%5E%7B%5Csigma%20(s_i-s_j)%7D%7D%7C%5CDelta%20Z_%7Bij%7D%7C

math?formula=%5CDelta%20Z_%7Bij%7D表示Ui和Uj交换位置后,评估指标的变化,它可以是

math?formula=%5CDelta%20NDCG

NDCG倾向于将排名高并且相关性高的文档更快地向上推动,而排名地而且相关性较低的文档较慢地向上推动。

附:NDCG计算方法

629fdbf2bfc5

LambdaMART

MART

MART(Multiple Additive Regression Tree)又称为GBDT(Gradient Boosting Decision Tree)。MART第t轮的学习目标是t-1轮的残差,由Additive可知,前t轮所有预测结果相加即是第t轮的预测结果,并用该结果计算残差用来迭代第t+1轮。可以用如下公式表示:

math?formula=F_n(x)%3D%5Csum_%7Bi%3D1%7D%5E%7BN%7D%5Calpha_if_i(x)MART使用加权求和的方式将拟合的树结合起来,作为最后的输出。

为什么拟合残差可以减小误差?

假设拟合误差C是关于Fn的函数,那么根据链式求导法则有:

math?formula=%5Cdelta%20C%20%5Capprox%20%5Cfrac%7B%5Cpartial%7BC(F_n)%7D%7D%7B%5Cpartial%7BF_n%7D%7D%5Cdelta%20F_n

当C的梯度小于0时,误差是减小的,所以令

math?formula=%5Cdelta%20F_n%3D-%5Ceta%20%5Cfrac%7B%5Cpartial%7BC%7D%7D%7B%5Cpartial%7BF_n%7D%7D可以使

math?formula=%5Cdelta%20C%20%3C0,即Fn不断拟合误差C的负梯度方向来减小误差

例如当C是最小二乘(平方和损失)函数时:

math?formula=C%3D%5Cfrac%7B1%7D%7B2%7D(F_n-y)%5E2,即有

math?formula=%5Cdelta%20F_n%3D-%5Ceta%20%5Cfrac%7B%5Cpartial%7BC%7D%7D%7B%5Cpartial%7BF_n%7D%7D%3D-%5Ceta%20(F_n-y)

从泰勒展开的角度讲:

第m轮的迭代目标是找到一颗CART树的弱学习器

math?formula=f_m(x%2Ca_m),使得

math?formula=L(y%2C%20F_%7Bm%7D(x))%20%3DL(y%2C%20F_%7Bm-1%7D(x)%2B%20h(x%2Ca_m))最小,换句话说就是让损失函数变得更小

将上面的损失函数进行泰勒展开:

math?formula=L(y%2C%20F_%7Bm%7D(x))%3DL(y%2C%20F_%7Bm-1%7D(x)%2B%20f_m(x%2Ca_m))%3DL(y%2C%20F_%7Bm-1%7D(x))%2B%5Cfrac%7B%5Cpartial%20L(y%2C%20F_%7Bm-1%7D(x))%7D%7B%5Cpartial%20F_%7Bm-1%7D%7Df_m(x%2Ca_m)

保证等号左边的取值小于等号的右边,显然有

math?formula=%5Cfrac%7B%5Cpartial%20L(y%2C%20F_%7Bm-1%7D(x))%7D%7B%5Cpartial%20F_%7Bm-1%7D%7Df_m(x%2Ca_m)%3C0

但此时弱学习器是未知的,因此自然的考虑到用已知的负梯度为目标去建立这个CART树,即

math?formula=h(x%2Ca_m)%3D-%5Cfrac%7B%5Cpartial%20L(y%2C%20F_%7Bm-1%7D(x))%7D%7B%5Cpartial%20F_%7Bm-1%7D%7D

根据GBDT的损失函数:

math?formula=L(y%2CF)%3Dlog(1%2Bexp(-2yF)%2Cy%20%5Cin%20%5C%7B-1%2C1%5C%7D

它的负梯度方向是

math?formula=%5Ctilde%7By_i%7D%3Dr_%7Bim%7D%20%3D%20-%5Cbigg%5B%5Cfrac%7B%5Cpartial%20L(y_i%2C%20F(x_i)))%7D%7B%5Cpartial%20F(x_i)%7D%5Cbigg%5D_%7BF(x)%20%3D%20F_%7Bm-1%7D(x)%7D%3D%5Cfrac%7B2y_i%7D%7B(1%2Bexp(2y_iF_%7Bm-1%7D(x)))%7D

第m颗回归树对应的叶子节点区域

math?formula=%5Cgamma_%7Bjm%7D%2C%20j%20%3D1%2C2%2C...%2C%20J,其中J为叶子节点的个数。针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值

math?formula=%5Cgamma_%7Bjm%7D如下:

math?formula=%5Cgamma_%7Bjm%7D%20%3D%20%5Cunderbrace%7Barg%5C%3B%20min%7D_%7Bc%7D%5Csum%5Climits_%7Bx_i%20%5Cin%20R_%7Bjm%7D%7D%20L(y_i%2CF_%7Bm-1%7D(x_i)%20%2B%5Cgamma)%3D%5Cunderbrace%7Barg%5C%3B%20min%7D_%7Bc%7D%5Csum%5Climits_%7Bx_i%20%5Cin%20R_%7Bjm%7D%7D%20log(1%2Bexp(-2y_i(F_%7Bm-1%7D(x_i)%2B%5Cgamma)))

需要注意的是:正常的CART树叶子节点的权重是落到该节点样本的均值,而GBDT中CART树的输出还有一个学习率

math?formula=%5Crho,以下的缩写是说CART树的输出和学习率的乘积看成了CART回归树的最终输出,可以避免设置学习率。所以第m轮弱学习器拟合函数如下:

math?formula=h(x%2Ca_m)%3D%20%5Csum%5Climits_%7Bj%3D1%7D%5E%7BJ%7D%5Cgamma_%7Bjm%7DI(x%20%5Cin%20R_%7Bjm%7D)

从而得到强学习器:

math?formula=F_%7Bm%7D(x)%20%3D%20F_%7Bm-1%7D(x)%20%2B%20%5Csum%5Climits_%7Bj%3D1%7D%5E%7BJ%7Dc_%7Bjm%7DI(x%20%5Cin%20R_%7Bjm%7D)

LambdaMART(MART+Lambda梯度)

629fdbf2bfc5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值