一、数据转换
如何对于训练数据做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