机器学习面试:交叉特征

编程入门 行业动态 更新时间:2024-10-22 21:30:39

机器学习面试:交叉<a href=https://www.elefans.com/category/jswz/34/1769701.html style=特征"/>

机器学习面试:交叉特征

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​
数码100
女装010
美妆001
性别 s 1 s_1 s1​ s 2 s_2 s2​
10
01
性别x类目 s 1 c 1 s_1c_1 s1​c1​ s 1 c 2 s_1c_2 s1​c2​ s 1 c 3 s_1c_3 s1​c3​ s 2 c 1 s_2c_1 s2​c1​ s 2 c 2 s_2c_2 s2​c2​ s 2 c 3 s_2c_3 s2​c3​
男x数码100000
男x女装010000
男x美妆001000
女x数码000100
女x女装000010
女x美妆000001

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+e−∑wi​xi​1​
做一个非常有趣的变换
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(1−yy​)=∑wi​xi​
为什么做这个变换呢?我们知道推荐系统的目标是排序,预测概率是为排序服务的,例如我们有两个物品 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(1−y1​y1​​)−ln(1−y2​y2​​)=ln(y2​−y1​y2​y1​−y1​y2​​)>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 +... ∑wi​xi​=∑wj​xj​+∑wk​xk​+...

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)​=ws1​∗s1​+ws2​∗s2​​+wc1​∗c1​+wc2​∗c2​+wc3​∗c3​​=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​​

更多推荐

机器学习面试:交叉特征

本文发布于:2024-03-23 22:52:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743787.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:特征   机器

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!