Feature Engineering(特征工程)
希望目标值 y y y和特征 x = [ x 1 , x 2 , . . . , x p ] x=[x_{1},x_{2},...,x_{p}] x=[x1,x2,...,xp]( p p p表示特征数量)之间存在某种关系: y ≈ y ^ = θ 1 f 1 ( x 1 ) + θ 2 f 2 ( x 2 ) + . . . + θ p f p ( x p ) y\approx \hat{y}=\theta_{1}f_{1}(x_{1})+\theta_{2}f_{2}(x_{2})+...+\theta_{p}f_{p}(x_{p}) y≈y^=θ1f1(x1)+θ2f2(x2)+...+θpfp(xp)。
则 f i ( x i ) f_{i}(x_{i}) fi(xi)称为特征映射函数或者基底函数,寻找合适的特征映射函数(基底函数)称为Feature Engineering(特征工程),而寻找合适的系数 θ i \theta_{i} θi就是最小二乘问题,具体实现过程见之前的笔记。
下面对常用的特征工程方法进行汇总,主要包括三类:特征升维、降维和维度不变三种情况。顾名思义,就是增加、减少和保持原数据的特征数量(original features)不变。
一、维度不变的特征工程方法
- Standardize Feature(标准化)
标准化方法有很多,最常用的是最大最小值标准化和z-score标准化,以后者为例,将源数据转化成标准正态分布数据,标准化公式为 f i ( x i ) = x i − X ‾ S f_{i}(x_{i})=\frac{x_{i}-\overline{X}}{S} fi(xi)=Sxi−X。 - Winsorize Feature
该方法是以Winsor名字命名的,因此没有中文翻译。具体操作就是通过给定阈值(Threshold= θ \theta θ)将源数据缩小范围至 [ − θ , θ ] [- \theta,\theta] [−θ,θ],计算公式如下
f i ( x i ) = { x i , x i ∈ [ − θ , θ ] − θ , x i < − θ θ , x i > θ f_{i}(x_{i})=\left\{ \begin{aligned} x_{i}&,x_{i} \in [- \theta,\theta] \\ -\theta&,x_{i}<-\theta\\ \theta&,x_{i}>\theta \end{aligned} \right. fi(xi)=⎩⎪⎨⎪⎧xi−θθ,xi∈[−θ,θ],xi<−θ,xi>θ
二、升维特征工程
- Expanding Categories(增加类别,包括多分类任务中经常用到的one-hot向量)
当某个特征对应样本的数值只有简单的几个数时,比如1,-1,0,2,这样可以增加4个布尔特征(Boolean Feature),其中一个新特征的值为:当 x = 1 x=1 x=1时, f ( x ) = 1 f(x)=1 f(x)=1;当 x = − 1 , 0 , 2 x=-1,0,2 x=−1,0,2时, f ( x ) = 0 f(x)=0 f(x)=0,通过其他几个数构造的新特征计算方法同理。
以 x 1 = − 1 , 0 , 1 x_{1}=-1,0,1 x1=−1,0,1为例,可以生成两个新特征:
f 1 ( x 1 ) = { 1 , x 1 = − 1 0 , x i = 0 0 , x i = 1 f 2 ( x 1 ) = { 0 , x 1 = − 1 0 , x i = 0 1 , x i = 1 f_{1}(x_{1})=\left\{ \begin{aligned} 1&,x_{1}=-1 \\ 0&,x_{i}=0\\ 0&,x_{i}=1 \end{aligned} \right. f_{2}(x_{1})=\left\{ \begin{aligned} 0&,x_{1}=-1 \\ 0&,x_{i}=0\\ 1&,x_{i}=1 \end{aligned} \right. f1(x1)=⎩⎪⎨⎪⎧100,x1=−1,xi=0,xi=1f2(x1)=⎩⎪⎨⎪⎧001,x1=−1,xi=0,xi=1
原特征和新特征对应样本的值如下表所示。
x 1 x_{1} x1 | f 1 ( x 1 ) f_{1}(x_{1}) f1(x1) | f 2 ( x 1 ) f_{2}(x_{1}) f2(x1) |
---|---|---|
-1 | 1 | 0 |
0 | 0 | 0 |
1 | 0 | 1 |
- Generalize Additional Model(标准化新增模型)
该方法对应源数据的每个特征可以增加2个特征,因此进行完该操作之后特征数量变成了 3 n 3n 3n。
对应 x i x_{i} xi的两个新特征分别为 x ~ i 1 = m i n { x i + a , 0 } \widetilde{x}_{i1}=min\left\{x_{i}+a , 0\right\} x i1=min{xi+a,0}, x ~ i 2 = m a x { x i − b , 0 } \widetilde{x}_{i2}=max\left\{x_{i}-b , 0\right\} x i2=max{xi−b,0}。 x ~ i 1 \widetilde{x}_{i1} x i1表示取源数据 − a -a −a下方的数或者0, x ~ i 2 \widetilde{x}_{i2} x i2表示源数据 b b b上方的数或者0。 - Products and Interaction(交叉相乘)
该方法是为了生成新特征 x ~ = x i x j , i , j = 1 , 2 , . . . , p \widetilde{x}=x_{i}x_{j},i,j=1,2,...,p x =xixj,i,j=1,2,...,p。 - Stratified Model(分层模型)
将源数据进行聚类,提取每个类别的样本数据作为新的特征。如特征“收入”可以变成“男性收入”和“女性收入”。
三、应用比较广泛的特征工程方法
- Custom Mapping(自定义映射)
取某 m m m个特征 x i 1 , x i 2 , . . . , x i m x_{i_{1}},x_{i_{2}},...,x_{i_{m}} xi1,xi2,...,xim进行自定义映射到新的特征 x p + 1 x_{p+1} xp+1。 - Prediction from Other Model(模型迁移)
将已知模型的结果数据作为新的模型输入特征。 - Random Features(随机特征,特别常用)
希望加入 K K K个随机特征,构造随机矩阵 R p ∗ K R_{p*K} Rp∗K,新的特征就是 Y N ∗ K = X N ∗ p R p ∗ K Y_{N*K}=X_{N*p}R_{p*K} YN∗K=XN∗pRp∗K。 - Neural Network Features(神经网络提取特征)
应用卷积神经网络、记忆网络等网络结构提取数据特征是目前研究的一大热点问题,这里不多写了。