【特征工程 03】如何有效地找到组合特征?

1. 什么是组合特征?

为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征广告点击预估问题(表1.2 是语言和类型对点击的影响)为例,原始数据有语言和类型两种离散特征:

为了提高拟合能力,语言和类型可以组成二阶特征(表1.3 是语言和类型的组合特征对点击的影响):

2. 如何处理高维组合特征?

逻辑回归为例,假设数据的特征向量为 X=(x_1,x_2,...,x_n) 则有,

Y=sigmoid(\sum\limits_{i}\sum\limits_{j} w_{ij}<x_i,x_j>)

 其中 <x_i,x_j> 表示 x_i 和 x_j 的组合特征,w_{ij} 的维度等于 |x_i|\cdot |x_j||x_i| 和 |x_j| 分别代表第 i 个特征和第 j 个特征不同取值的个数。在表1.3 的广告点击预测问题中,w 的维度是 2\times 2=4(语言取值为中文或英文两种、类型的取值为电影或电视两种)。这种特征组合看起来是没有任何问题的,因为此时特征的维数还较低。但尤其是当引入ID类型的时候,问题就出现了。

推荐问题(表1.4 是用户ID和物品ID对点击的影响)为例:

将用户ID和物品ID组合成一个高维组合特征: 

若数据的数量为 m、物品的数量为 n,那么需要学习的参数的规模为 m\times n。在互联网环境下,用户的数量和物品数量都可以达到千万量级,几乎无法学习 m\times n 级别的参数。

在这种情况下,一种行之有效的方法是:将用户和物品分别用 k 维的低维向量表示(k\ll m, k\ll n)(这儿说一嘴,看书的时候,用k维的低维向量表示并没有给出详细说明,所以这里看得不是很懂,有了解了的不妨可以评论告诉我)

Y=sigmoid(\sum\limits_{i}\sum\limits_{j} w_{ij}<x_i,x_j>)

其中 w_{ij}=x_i^{'}\cdot x_j^{'}x_i^{'} 和 x_j^{'} 分别表示 x_i 和 x_j 对应的低维向量。在 表1.5 的推荐问题中,需要学习的参数规模变为 m\times k+n\times k。熟悉推荐算法的很快可以看出来,这其实等价于矩阵分解(感兴趣的可以了解一下SVD奇异值分解)。所以 ,这里也提供了另一个理解推荐系统中矩阵分解的思路。

3. 怎样有效地找到组合特征?

我们虽然可以利用类似矩阵分解的降维方法来减少两个高维特征组合后需要学习的参数。但是在很多实际问题中,我们常常需要面对多种高维特征。如果简单地两两组合,依然容易存在参数过多、过拟合等问题,而且并不是所有的特征组合都是有意义的。因此,需要有一种有效的方法来帮助我们找到应该对哪些特征进行组合。

这里介绍一种基于决策树的特征组合寻找方法以点击预测问题为例,假设原始输入特征包含年龄、性别、用户类型(试用期、付费)、物品类型(护肤、食品等)4个方面的信息,并且根据原始输入和标签(点击 / 未点击)构造出了决策树,如 图1.2 所示。

于是,每一条从根节点到叶节点的路径都可以看成一种特征组合的方式具体来说,就有以下4种特征组合的方式。

(1)“年龄 <= 35” 且 “性别 = 女”。
(2)“年龄 <= 35” 且 “物品类别 = 护肤”。
(3)“用户类型 = 付费” 且 “物品类别 = 食品”。
(4)“用户类型 = 付费” 且 “年龄 <= 40”。

表1.6 是两个样本信息,那么第 1 个样本按照上述 4 个特征组合就可以编码为(1,1,0,0),因为同时满足(1)(2),但不满足(3)(4)。同理,第 2 个样本可以编码为(0,0,1,1),因为它同时满足(3)(4),但不满足(1)(2)。

给定原始输入该如何有效地构造决策树呢?可以采用梯度提升决策树,该方法的思想是:每次都在之前构建的决策树的残差上构建下一棵决策树。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值