在进行深度学习研究时,通常需要量级足够大的数据来对模型进行训练,而当数据的特征值非常多时,不论是从减少计算量的角度还是提升结果精度的目的出发,特征工程都是必要的。选择适合当前数据的特征工程方法,并构建符合当前问题的特征,使用这些特征进行训练,往往会得到好的模型训练效果。
特征是一个客体或一组客体特性的抽象结果。特征是用来描述概念的。任一客体或一组客体都具有众多特性,人们根据客体所共有的特性抽象出某一概念,该概念便成为特征。
通俗地说,当你走在路上,迎面走来一个熟人,是否戴眼镜、鼻子高低、头发长短、声线等都是他作为一个人的特征,而你的大脑也就会在潜意识里提取这些特征,从你脑子里所记得的所有熟人中把他辨认出来。其实这里除了特征,还涉及另一个专业名词——标签。在这个例子里,这个熟人的名字就是这组特征所对应的标签。
在深度学习领域,给定一个训练数据集,通常每一行代表的就是一个数据的给定特征,如表4-1所示,大小、甜度、单价等就是这些水果的特征。
表4-1 数据的特征
数据决定了机器学习的上限,而算法只是尽可能逼近这个上限,这里的数据指的就是经过特征工程得到的数据。特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限。特征工程能使模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。
表4-1中的水果数据由于特征量较少,且每个特征之间的关联度很小,因此特征工程在它上面的作用可能微不足道,然而对于特征量非常多且特征之间关系复杂而密切的数据集,特征工程通常直接地影响预测/分类结果。现在我们初步认识一下特征工程包括的操作类别。
(1)特征变换(feature transformation)
特征变换指的是使用数学映射从现有特征构建新特征。例如,在一组体检数据中,若提供了身高、体重等信息,想要判断受检者健康情况,单单把身高、体重两列数据不加处理地直接交给模型进行训练,训练结果就不够好。为什么呢?因为在大量数据中,身高处于155~180cm,体重处于45~80kg的数据占大多数,模型对这个区间的数据训练得很好,但是对于区间之外的特例,由于数据量小,也就不足以达到良好的训练水平,最后预测的结果也会不够准确。但是如果能构建一个对所有身高量级的人都适用的“身高/体重比率”特征,那么对于特例,通过这个比率就可以更准确地得知他们的身高体重是否正常,这样添加/替换后的新特征值更能反映健康情况,就可以大大提升预测结果 。
(2)特征提取/构建(feature extraction/construction)
在机器学习的模式识别和图像处理中,特征提取就是从一组初始观测数据中提取出信息量高、冗余度低的派生特征集合,从而促进后续学习和泛化的步骤,并增强模型可解释性。特征提取是一个降维过程,原始特征集在保留信息准确性与完整性的前提下被简化为更易于理解与使用的特征集。例如,在图像分类问题中,通常需要将图片中的人物、动物、物体的轮廓等基本特征提取出来。目前这一部分的工作已经基本由自动化模式完成,后续我们将进行更详细的介绍。
(3)特征选择(feature selection)
特征选择通常包括去除无用变量、共线性变量等。例如,在一组体检数据中,如果有几列特征分别代表受检人姓名、编号、联系方式、住址等个人信息,这些数据就是对于模型的训练是没有任何作用的无用变量,为了提升训练效率可以直接将这些特征删除,换句话说,就是将其他有用的特征提取出来。共线性变量顾名思义就是线性相关性很强的变量。例如:在同一个产品的销售员销售记录中,销售量和销售额就是完全线性的(产品单价相同),二者只需取其一。不然在后续模型训练中线性回归会不稳定,系数也会失去解释性。
(4)特征分析与评估(feature evaluation)
顾名思义,特征分析与评估就是对特征的“有用程度”进行评估。在上文中我们举的例子都是根据常识对特征进行转换、提取等操作。而在实际的研究过程中,特征多而杂,特征名称并不总是我们所熟知的一些生活名词,这种情况下就要用更科学的方式来量化特征的重要程度或特征间的相关性。一般情况下是复杂度与性能的权衡,复杂度通过特征的维数度量,性能度量则常用AUC、loss、accuracy表示等。