购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 特征工程

特征工程一般指的是,根据对数据来源的专业知识来构造更合适甚至更好的特征变量,从而使机器学习算法给出更好的预测效果。好的特征工程会使机器学习算法的预测能力得到大幅提高,特征工程可以说是机器学习建模过程中非常重要的一个环节。

下面以飞机起飞为例来说明特征工程的步骤。表3.1所示为飞机预计起飞时间和实际飞机状态,这些数据是收集到的原始数据,但是日期这样的特征,显然不适合作为特征直接输入模型。经过简单的观察和思考,可以猜测飞机的起飞状态跟预计起飞时间所在的时刻有一定关系。因此创造出飞行时刻(小时)这一特征,就可以更好地预测飞机状态。

表3.1 飞机起飞原始特征举例

把起飞时间特征转换为飞行时刻(小时)特征,这个特征转换操作非常简单,却能更好地反映本质并被模型利用,如表3.2所示。

表3.2 飞机起飞特征工程举例

再以自然语言处理中的特征工程为例,假设要预测给定的一句话的情感为乐观还是悲观,如“今天我很高兴”这句话,必须先将自然语言转换为算法能够理解的数值向量。

具体方法为,将所有训练数据中的文字按先后顺序从1开始编码,假设有1万个字,那么可以将每一句话转换为一个1万维的向量。假设“今天我很高兴”这句话中的每个字对应的编码分别为2,10, 89,199,200,1001,那么这句话对应的1万维向量中只有这6个字对应的位置数值为1,其余9994个位置的数值为0。可以看出,这样的向量是高度稀疏的。

3.3.1 分类变量编码技术

分类变量或枚举类型变量在建模问题中非常常见,如车辆的颜色可能有红色、白色和黑色几种。虽然有些算法,如决策树可以直接用枚举类型变量作为输入值,但是大多数算法只能处理数值类型变量。在这种情况下,必须对枚举类型变量进行合理的数值编码。

one-hot编码(一位有效编码)是一种常用的方法,该方法把K个枚举值的变量转换为K或K-1个二进制变量,并且只有一个变量位置为1,其余变量位置为0。例如,有红色、白色和黑色3种车辆颜色枚举变量,经过转换后的编码如表3.3所示。

表3.3 车辆颜色特征one-hot编码示范

从上面的例子中可以看出,一个具有K个枚举值的枚举变量,需要转换为K个新的二进制变量。该变量也可以转换为K-1个二进制变量是因为最后一个枚举值可以由其他枚举值推算出来,如可以去掉is_red这个变量。这说明这K个新产生的枚举变量是高度相关的。这个问题在统计分析中非常重要。例如,在运用回归算法分析时,如果不减少二进制变量的数量,会造成共线性的问题,从而导致算法优化失败。但是对于有正则约束条件的回归算法,是可以采用K个二进制变量的,当然前提是,建模者和使用者关心的只是算法的预测能力,而不是特征的解释性。另外,对于决策树之类的算法,共线性也不是一个问题,因为并不违背任何假设和数学运算。

当枚举变量的枚举值比较少时,经过one-hot编码后,多出来的特征变量仍然在可以控制的范围内。但是当枚举值特别多时,如邮政编码可能有几千个到上万个枚举值,算法就要多处理上万个特征变量,显然是不可取的。在这种情况下,需要用其他的方法来处理枚举变量的编码,通常有以下几种方法。

(1)根据对数据的理解,考虑合并枚举值。例如,虽然每一个小分区都有一个不同的邮政编码,但是可以将小分区合并为大的行政区,如一个市或省,这样邮政编码的数量将大大减少。

(2)借助评分卡建模的经验,把枚举变量转换为WOE值,从而具有一定的顺序,可以被当作数值类型变量处理。

(3)把枚举变量转换为对应的目标变量(Y=0或1)的平均值,这个方法其实和WOE变量转换思路是一致的,但是需要注意过拟合的问题。例如,车辆颜色为红色时,对应的数据数量非常少,那么把红色转换为这些少量数据Y值的平均值,就容易引起算法过拟合(可以理解为算法记住了这种特殊情况),因为算法很快就会错误地学会把红色和特定目标Y值联系起来。考虑到这样的情况,可以用以下公式来克服这个困难:

即枚举值可以转换为对应Y数据的平均值和所有Y数据平均值的加权求和。其中权重λ(n)和枚举值的频率相关(n代表当前枚举值level的数据点个数),从而使得枚举值对应的数据比较少时,λ(n)接近0,其对应编码值接近所有数据的平均值。当枚举值对应数据较多时,λ(n)接近1,则编码值主要由当前枚举值对应的数据点决定。

3.3.2 特征筛选技术

提到特征筛选,首先要理解维度灾难(Curse of Dimensionality)这一概念。当模型的维度提高时,模型空间的体积也会随之增大,有限的数据变得相对稀疏。在高维度空间中,所有的数据都将变得很稀疏,所有数据点在很多角度看都不相似,因此常用的数据组织策略变得非常低效。为了获得统计上有意义的结果,模型需要的数据必须随着维度的提高而呈指数级增长,才能符合模型优化的需求。

为了避免出现维度灾难,当模型潜在的输入特征变量过多时,需要去除一些不重要的特征,只保留对模型预测能力最有效的部分特征。较少的特征变量也可以提高模型训练和运算的效率和稳定性。在某些情况下,数量较少和高效的特征子集也可以帮助模型取得更加优秀的效果。通常情况下,特征越少,过拟合的可能性也越小,模型的泛化能力越高。

第一类特征筛选方法是基于统计方法的特征筛选,常用的技术手段如下。

(1)去除方差较小的特征:方差较小,则这个特征对应的数据分布变化范围较小。极端情况下,如果特征对应的向量为常数,则方差为0。在特征量大的情况下,首先去除方差接近0的特征是一个简单快捷的方法。当然,比较不同的特征方差之前,最好把特征归一化,才能更加公正地比较。

(2)观察相关系数(如皮尔森系数Pearson’s Correlation):皮尔森系数用于量化两个连续变量的线性相关程度。因此,可以计算每个特征和目标变量的相关程度,从而只保留和目标变量相关程度高的特征。如果考虑数据不是线性关系,还可以利用Spearman’s系数,该系数考虑数据之间的相对排序相关性。

(3)向前选择法(Forward Selection)和向后选择法(Backward Elimination)。向前选择法是一种迭代方法,首先选取一个算法,通常是回归算法,测试每一个特征,选取效果最好的特征作为初始模型;然后,从余下的特征中,每次尝试添加一个特征进入模型,最后选取效果最好的特征进入第二次迭代模型,以此类推,直到模型的效果不能再提升或达到预先规定的特征数量为止。向后选择法则是一开始使用所有特征建立模型,再去掉最不重要(依据特征系数大小、p-value等)的一个特征,然后重新训练模型,以此类推,直到模型效果不再提升或特征数量达到要求为止。

第二类特征筛选方法是通过降低特征维度来实现特征的选取。降维处理不是从原有的特征里面直接挑选子集,而是通过数学转换的方法,对原有特征进行线性或非线性的组合,重新给出新的特征变量。

(1)主成分分析(Principal Component Analysis,PCA)通过正交变换的方式,把一系列相关的变量转换为线性无关的主成分变量。第一个主成分变量的方差最大,因此保留了原始数据最多的变化范围和信息。在特征选取的应用中,通常选取前面几个主要的主成分,在理论上保留原始数据中绝大多数的变化范围。因此,该技术有可能用数量远远少于原始特征的新特征获得和原始模型相同或更好的效果。

(2)线性判别分析(Linear Discriminant Analysis)是Fisher’s Linear Discriminant的推广,用来找出能够区分目标变量的最好的原始特征的线性组合方式。

(3)t-SNE(t-distributed Stochastic Neighbor Embedding)算法常用在视觉展现中,是一个优秀的非线性降维方法。本质上,该算法把高维度的数据点投影到二维或三维空间中,并使得相似的数据点非常靠近,而不相似的数据点会尽量远离。

(4)LDA(Latent Dirichlet Allocation)算法常用在自然语言分析中,用于找出文本语言的主题成分,但也可以推广到一般的特征降维中。通过LDA找到的主题成分即是新的特征变量。

第三类特征筛选方法是基于模型算法来进行特征选取的方法。

(1)线性模型中的正则化方法L1 Regularization。正则化(Regularization)方法通常在线性模型中(包括线性回归和逻辑回归)加入额外的限制项,以此来限制模型过拟合。L1 Regularization(也称为Lasso Regularization)是把模型优化(通常为最小化)的损失方程Loss(X,Y)转化为一个新的损失方程,即

式中,w为模型中每个特征对应的系数。正则化越强,系数α越大,则模型会迫使更多的系数为0,相当于自动进行了特征选取。

(2)集成类决策树算法的不纯度下降(Mean Decrease In Impurity)方法。随机森林算法或梯度增强机算法是常用的基于决策树的集成类机器学习算法,也提供了非常直接的方法来对特征进行排名。例如,随机森林算法中包含一系列的决策树,在每一个决策树中的每一个节点,算法会根据某一个特征的值来把数据一分为二,从而使相似的数据点被分到一起。而在每一个节点的分类方法是根据Gini Impurity、Information Gain或Entropy决定的。根据这个原理,可以先算出某一个特征在每一个决策树中对数据加权的Impurity的减小程度,进而算出所有决策树的平均值。依据平均值,可以对所有特征进行排名,从而进行特征选取。

(3)集成类决策树算法的效果下降(Mean Decrease In Accuracy)方法。该方法是利用集成类决策树算法,直接比较特征对模型效果(评价标准包括Accuracy、AUC、KS等)的影响。其主要实现方法是,随机对某一特征值向量进行置换(permutation),然后重新测量模型在测试数据下的效果降低程度。很显然,如果该特征不是那么重要,模型效果降低程度应该有限。通过对每一个特征的置换和测量,可以对特征进行排名,从而进行特征选取。 rOPZzsBjeiItEj3taimHU6cQetL8zjV3K5G4XDyrItJ68ULKcTRE9CTuogmsKpWI

点击中间区域
呼出菜单
上一章
目录
下一章
×