为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。
以广告点击预估问题(表1.2 是语言和类型对点击的影响)为例,原始数据有语言和类型两种离散特征:
为了提高拟合能力,语言和类型可以组成二阶特征(表1.3 是语言和类型的组合特征对点击的影响):
以逻辑回归为例,假设数据的特征向量为??则有,
?其中??表示??和??的组合特征,?的维度等于?,?和??分别代表第 个特征和第??个特征不同取值的个数。在表1.3 的广告点击预测问题中,?的维度是?(语言取值为中文或英文两种、类型的取值为电影或电视两种)。这种特征组合看起来是没有任何问题的,因为此时特征的维数还较低。但尤其是当引入ID类型的时候,问题就出现了。
以推荐问题(表1.4 是用户ID和物品ID对点击的影响)为例:
将用户ID和物品ID组合成一个高维组合特征:?
若数据的数量为?、物品的数量为?,那么需要学习的参数的规模为?。在互联网环境下,用户的数量和物品数量都可以达到千万量级,几乎无法学习??级别的参数。
在这种情况下,一种行之有效的方法是:将用户和物品分别用??维的低维向量表示:(这儿说一嘴,看书的时候,用k维的低维向量表示并没有给出详细说明,所以这里看得不是很懂,有了解了的不妨可以评论告诉我)
其中?,?和??分别表示??和??对应的低维向量。在 表1.5 的推荐问题中,需要学习的参数规模变为?。熟悉推荐算法的很快可以看出来,这其实等价于矩阵分解(感兴趣的可以了解一下SVD奇异值分解)。所以?,这里也提供了另一个理解推荐系统中矩阵分解的思路。
我们虽然可以利用类似矩阵分解的降维方法来减少两个高维特征组合后需要学习的参数。但是在很多实际问题中,我们常常需要面对多种高维特征。如果简单地两两组合,依然容易存在参数过多、过拟合等问题,而且并不是所有的特征组合都是有意义的。因此,需要有一种有效的方法来帮助我们找到应该对哪些特征进行组合。
这里介绍一种基于决策树的特征组合寻找方法。以点击预测问题为例,假设原始输入特征包含年龄、性别、用户类型(试用期、付费)、物品类型(护肤、食品等)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)。
给定原始输入该如何有效地构造决策树呢?可以采用梯度提升决策树,该方法的思想是:每次都在之前构建的决策树的残差上构建下一棵决策树。