特征组合(特征交叉)
motivation:让模型学习到更复杂的非线性特征。
method:原始特征 + 组合特征。
notes:
连续特征和离散特征都可以做交叉。
HOW TO?
离散特征:笛卡尔积
比如属性A有三个特征,属性B有两个特征,笛卡尔积后就有六个组合特征,然后用one hot 或其他embedding方式给新的特征编码。
问题:这种暴力做交叉很可能导致特征稀疏的问题。
连续特征:
除了一般对于连续型特征的加减乘除生成新的特征以外,还可以对多个特征(连续特征离散化)进行组合。
构造多项式
多项式生成函数:
sklearn.preprocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias=True)
示例:
from sklearn.preprocessing import PolynomialFeatures x = np.arange(6).reshape(3,2) print x [[0 1] [2 3] [4 5]] poly = PolynomialFeatures()#默认输入两个参数 help(poly) poly.fit_transform(x) array([[ 1., 0., 1., 0., 0., 1.], [ 1., 2., 3., 4., 6., 9.], [ 1., 4., 5., 16., 20., 25.]])
input_feature = (x1,x2), output_feature =
特征组合与业务理解
日常工作场景中的特征往往都是以用户和其对应的属性作为出发点,然后和物品对应的属性特征或者上下文特征进行交叉组合,比如:
- 用户与类别特征组合(eg:电商平台中,用户在不同类别下的点击次数,可以简单衡量用户的类别偏好)
- 用户不同年龄档与类别特征组合(eg:新闻平台中,少年用户在娱乐新闻下的点击次数会比较高,青年用户在社会新闻下的点击次数会比较高)
- 用户身份与时间特征组合(eg:学生周六周日、节假日,在某娱乐APP内的行为会比较丰富,上班族早晚高峰,在某娱乐APP内的行为会比较丰富)
- 用户的价格偏好与物品的价格级别特征组合(eg:用户A偏好的价格级别为中,物品的价格级别为高,那么组合特征就是0,即两者不匹配)
在实际的场景中,往往会结合数据分析去挖掘潜在的价值特征组合。这时候便会借助数据分析、数据挖掘、分析者的敏感直觉和对业务的深入理解去进行挖掘。例如,不同人群对于APP推送消息的处理风格和处理时间很不一样,有的人会直接划掉,有的人则会在某个时间段进行消息查看,这时候便可以考虑对用户Push消息提供个性化时间分发,从而提高用户的打开率。