机器学习面试:交叉特征

1.困惑之源

半年前第一次做推荐算法,无意中碰到了一个问题,我使用LR模型对用户和商品进行联合打分,其中使用了所谓的交叉特征,这个问题思考了大半年终于有了一些思路。
问题是这样的,我统计了不同用户在不同类目上的点击率,以此作为所谓的交叉特征,并且将点击率做了一个线上表,当用户请求时,直接查询用户历史所有的类目偏好。其中 u c uc uc表示用户(user)和类目(cate)的交叉特征,这里为点击率,下标表示用户id和类目id

用户 数码 女装 美妆
u 1 u_1 u1 u c 11 uc_{11} uc11 u c 12 uc_{12} uc12 u c 13 uc_{13} uc13
u 2 u_2 u2 u c 21 uc_{21} uc21 u c 22 uc_{22} uc22 u c 23 uc_{23} uc23
u 3 u_3 u3 u c 31 uc_{31} uc31 u c 32 uc_{32} uc32 u c 33 uc_{33} uc33
u 4 u_4 u4 u c 41 uc_{41} uc41 u c 42 uc_{42} uc42 u c 43 uc_{43} uc43

但是受到了其他同事的质疑,他说交叉特征是确定某个用户和某个类目之后,再去确定的某一个特征,例如在我们针对用户 u 1 u_1 u1推送了类目 c 3 c_3 c3,此时可以确定一个交叉特征 u c 13 uc_{13} uc13,这一个特征才是交叉特征。我觉得非常奇怪,为什么不可以把用户所有类目的偏好放到LR模型中呢?

2.特征处理

我将特征分层了三个部分

  1. 用户特征,包括用户性别,登陆次数,RFM等
  2. 商品特征,包括商品是否包邮,商品价格,商品类目等
  3. 交叉特征,这里主要用户和类目的交叉

为了简单,假设这里用户特征只有性别,商品特征只有类目,交叉特征就是性别和类目,由于都是离散特征,需要做onehot编码

类目 c 1 c_1 c1 c 2 c_2 c2 c 3 c_3 c3
数码 1 0 0
女装 0 1 0
美妆 0 0 1
性别 s 1 s_1 s1 s 2 s_2 s2
1 0
0 1
性别x类目 s 1 c 1 s_1c_1 s1c1 s 1 c 2 s_1c_2 s1c2 s 1 c 3 s_1c_3 s1c3 s 2 c 1 s_2c_1 s2c1 s 2 c 2 s_2c_2 s2c2 s 2 c 3 s_2c_3 s2c3
男x数码 1 0 0 0 0 0
男x女装 0 1 0 0 0 0
男x美妆 0 0 1 0 0 0
女x数码 0 0 0 1 0 0
女x女装 0 0 0 0 1 0
女x美妆 0 0 0 0 0 1

3. LR模型

我之前最熟悉的是LR模型,可解释性强,有大规模训练库,并且可以快速上线。特征处理好之后就可以直接输入到LR模型之中了
y = σ ( x ) = 1 1 + e − ∑ w i x i y=\sigma(x)=\frac{1}{1+e^{-\sum w_ix_i}} y=σ(x)=1+ewixi1
做一个非常有趣的变换
f ( y ) = l n ( y 1 − y ) = ∑ w i x i f(y)=ln(\frac{y}{1-y})=\sum w_ix_i f(y)=ln(1yy)=wixi
为什么做这个变换呢?我们知道推荐系统的目标是排序,预测概率是为排序服务的,例如我们有两个物品 i 1 , i 2 i_1,i_2 i1,i2,如果有 y 1 > y 2 y_1>y_2 y1>y2,那么给用户推荐商品的时候就是先推 i 1 i_1 i1,然后再推 i 2 i_2 i2,这个没有任何问题。有趣的地方来了,如果 y 1 > y 2 y_1>y_2 y1>y2 f ( y 1 ) f(y_1) f(y1) f ( y 2 ) f(y_2) f(y2)的大小关系是什么呢?
f ( y 1 ) − f ( y 2 ) = l n ( y 1 1 − y 1 ) − l n ( y 2 1 − y 2 ) = l n ( y 1 − y 1 y 2 y 2 − y 1 y 2 ) > 0 \begin{aligned} f(y_1)-f(y_2)&=ln(\frac{y_1}{1-y_1})-ln(\frac{y_2}{1-y_2})\\ &=ln(\frac{y_1-y_1y_2}{y_2-y_1y_2})>0 \end{aligned} f(y1)f(y2)=ln(1y1y1)ln(1y2y2)=ln(y2y1y2y1y1y2)>0

所以当 y 1 > y 2 y_1>y_2 y1>y2时,有 f ( y 1 ) > f ( y 2 ) f(y_1)>f(y_2) f(y1)>f(y2),函数变换之后并不会影响大小顺序。这样做有什么好处呢?原本我们需要去计算 σ ( x ) \sigma(x) σ(x),然后去比较概率大小,现在我们直接计算 ∑ w x \sum wx wx后排序就可以了,最重要的是线性函数有更强的可解释性。
之后可以将特征进行分组,例如分为用户特征,商品特征,交叉特征等等,可以写成
∑ w i x i = ∑ w j x j + ∑ w k x k + . . . \sum w_ix_i=\sum w_jx_j+\sum w_kx_k +... wixi=wjxj+wkxk+...

3.无交叉特征

特征现在有性别和类目,我们先不使用交叉特征直接训练一个LR模型试试。
f u ( i ) = w s 1 ∗ s 1 + w s 2 ∗ s 2 ‾ + w c 1 ∗ c 1 + w c 2 ∗ c 2 + w c 3 ∗ c 3 ‾ = c t r u s e r + c t r i t e m \begin{aligned} f_u(i)&=\underline{w_{s1}*s_1+w_{s2}*s_2} +\underline{ {w_{c1}*c_1+w_{c2}*c_2}+w_{c3}*c_3}\\ &= ctr_{user} + ctr_{item} \end{aligned} fu(i)=ws1s1+ws2s2+wc1c1+wc2c2+wc3c3=ctruser+ctritem

当模型训练完成之后,各个维度的权重就固定下来了。针对不同的用户,相同类目的权重是一样的,没有任何差异性

假如有一个用户 u 1 u_1 u1,有三个待推荐的商品,分别属于三个类目 i 1 : c 1 = 1 , i 2 : c 2 = 1 , i 3 : c 3 = 1 i_1:c_1=1,i_2:c_2=1,i_3:c_3=1 i1:c1=1,i2:c2=1,i3:c3=1。我们首先对用户 u 1 u_1 u1推荐商品,
i ∗ = a r g m a x ( f ( u 1 , i 1 ) , f ( u 1 , i 2 ) , f ( u 1 , i 3 ) ) = a r g m a x ( c t r u 1 + c t r i 1 , c t r u 1 + c t r i 2 , c t r u 1 + c t r i 3 ) = a r g m a x ( w s 1 + w c 1 , w s 1 + w c 2 , w s 1 + w c 3 ) = a r g m a x ( w c 1 , w c 2 , w c 3 ) \begin{aligned} i^*&=argmax(f(u_1,i_1),f(u_1,i_2),f(u_1,i_3))\\ &=argmax(ctr_{u_1}+ctr_{i1},ctr_{u_1}+ctr_{i2},ctr_{u_1}+ctr_{i3})\\ &=argmax(w_{s1}+w_{c1},w_{s1}+w_{c2},w_{s1}+w_{c3})\\ &=argmax(w_{c1},w_{c2},w_{c3}) \end{aligned} i=argmax(f(u1,i1),f(u1,i2),f(u1,i3))=argmax(ctru1

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值