关于learntorank http://qiita.com/rockhopper/items/bb3d46f01df5f6499123

一、数据转换

如何对于训练数据做pairwise的transform,比如你原始数据是要么点击要么不点击,如何对这些样本数据做pairwise的transform?

下面的方法主要是做组合的方法,就是针对指定group的所有样本作两两组合,然后作相减操作。

样本格式 <X,y>--其中X是多维度变量 就是不通特征值

先上代码

然后解释该代码:

》》第一个if主要是过滤: skip if same target or different group

#主要是点击不点击0和1:比较的时候肯定是针对同一个query(group),如果不在一个group那么不会比较的;而且如果同一个group,比较的肯定是点击的和不点击的,如果二者同是点击或者同是不点击那么没有必要比较的

》》第二个if主要是做类别均衡:因为比较的是同一个query的点击或者不点击,无外乎就是1和0。做相减就是1或者-1两种情况。但是因为点击的次数比较少,不点击次数较多,但是为了类别均衡,希望+1和-1能够个数相同,所以用了-1^^k做判断,如果不是期待的结果-1^^k,就要做逆操作,就是取-1.

》》然后还要注意一个变成技巧,因为这里最后去用作训练的结构是Xp,yp都是list,做append操作。用下标 -1表示list当前元素。k是用作计数;comb表示所有样本{<x,y>}的组合操作!

》》xp,yp--p表示pair的意思

》》range()返回一个list,做组合,2表示组合元祖长度。因为长度为2所有后边会有 tuple(i,j)

 

二、训练

训练就可以用 xgboost或者rf或者lr之类的处理了

参考文献     

 http://qiita.com/rockhopper/items/bb3d46f01df5f6499123

 

posted @ 2016-07-25 13:27  随遇而安jason  阅读(234)  评论(0编辑  收藏  举报