1、什么是特征交叉?
特征交叉是通过组合两个或更多个特征而形成的合成特征, 通过特征组合的方式增加特征的维度,以求得更好的训练效果。
如下图,无法用一条直线来对两组数据进行分类。
但是如果我们如果增加一个组合特征x1x2,得到分类图如下,下图我们就可以很好对两个类型的数据进行分类了。
2、如何进行有效组合特征?
2.1 针对数值型的特征一般直接进行相乘。例如
-
[A X B]: 2个特征相乘形成的组合特征 -
[A x B x C x D x E]: 5个特征相乘形成的组合特征 -
[A x A]: 通过单个特征的平方形成的组合特征
2.2 对于one-hot编码的格式特征同样可以组合,例如:
在房价预估中可能涉及到经纬度特征,通过分档编程下面:
binned_latitude(lat) = [ 0 < lat <= 10 10 < lat <= 20 20 < lat <= 30 ] binned_longitude(lon) = [ 0 < lon <= 15 15 < lon <= 30 ]
那现在我们想基于经度和纬度创建一个组合特征,那么就会形成2*3=6个特征值,类似于下面:
binned_latitude_X_longitude(lat, lon) = [ 0 < lat <= 10 AND 0 < lon <= 15 0 < lat <= 10 AND 15 < lon <= 30 10 < lat <= 20 AND 0 < lon <= 15 10 < lat <= 20 AND 15 < lon <= 30 20 < lat <= 30 AND 0 < lon <= 15 20 < lat <= 30 AND 15 < lon <= 30 ]
然后我们在使用时候,对这6个值进行0ne-hot编码即可。
在这里要注意一点,不一定组合特征对模型训练有帮助,具体哪个组合特征有意义要根据实际训练来确定。
3.暴力做交叉可能产生稀疏问题。
这种暴力做交叉很可能导致特征稀疏的问题,这里可以参考FM、FMM以及阿里妈妈发布的MLR的做法和解决思路。
FM(Factorization Machine)主要目标是:解决数据稀疏的情况下,特征怎样组合的问题。
FMM: 在FM模型中,每一个特征会对应一个隐变量,但在FFM模型中,认为应该将特征分为多个field,每个特征对应每个field 分别有一个隐变量。
特别说明: 以上第三点引自于CSDN博客专家https://blog.csdn.net/g11d111