类别型数据:特征交叉#
线性模型有个众所周知的短板:它只会画直线。这一节我们给它补上一块短板——特征交叉(Feature crosses)的做法,即把数据集中两个或更多类别型 / 分箱特征交叉起来(即取笛卡尔积)。
和多项式变换一样,特征交叉能让线性模型处理非线性情况。除此之外,它还额外编码了特征之间的交互关系。
推导一遍:叶片数据集#
来看一个叶片数据集,它有两个类别型特征:
edges(叶缘),取值有smooth、toothed、lobedarrangement(叶序),取值有opposite和alternate
假设上面这个顺序,就是独热表示中特征列的顺序。那么一片叶缘为 smooth、叶序为 opposite 的叶子,表示出来就是 {(1, 0, 0), (1, 0)}。
这两个特征的交叉(也就是笛卡尔积)结果是:
{Smooth_Opposite, Smooth_Alternate, Toothed_Opposite, Toothed_Alternate, Lobed_Opposite, Lobed_Alternate}
每一项的值,都是两个基特征对应值的乘积,也就是:
Smooth_Opposite = edges[0] arrangement[0]Smooth_Alternate = edges[0] arrangement[1]Toothed_Opposite = edges[1] arrangement[0]Toothed_Alternate = edges[1] arrangement[1]Lobed_Opposite = edges[2] arrangement[0]Lobed_Alternate = edges[2] arrangement[1]
举个例子。如果一片叶子叶缘是 lobed、叶序是 alternate,那么它的特征交叉向量在 Lobed_Alternate 这个项上取值为 1,其余各项全是 0:
{0, 0, 0, 0, 0, 1}
因为叶缘和叶序这些特征在同一树种内部是不变的,所以这份数据集可以用来按树种对叶片做分类。
与多项式变换的对比#
特征交叉与多项式变换多少有些相似:两者都是把多个特征合并成一个新的合成特征,让模型在它之上训练,从而学到非线性。区别在于——多项式变换处理的通常是数值型数据,而特征交叉处理的是类别型数据。
什么时候用特征交叉#
领域知识往往能帮你提示出一个有用的特征组合。但如果没有这类领域知识,光靠手工去判断哪些特征交叉、哪些多项式变换有效,是相当困难的。当然,也可以用神经网络在训练过程中自动去发现并应用有效的特征组合——只不过这样做的计算代价很高。
有一点必须小心:两个稀疏特征交叉之后,得到的那个新特征会比原来两个还要更稀疏。 比如,特征 A 是一个 100 元素的稀疏特征,特征 B 是一个 200 元素的稀疏特征,那么 A 与 B 的特征交叉会得到一个 20,000 元素的稀疏特征。
关键术语:
- 特征交叉(Feature cross)
- 神经网络(Neural network)