1 特征工程概述
“数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这里的数据指的就是经过特征工程得到的数据。特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是最大限度地从原始数据中提取特征以供算法和模型使用。从数学的角度来看,特征工程就是人工地去设计输入变量 x x x。特征工程在机器学习中占有非常重要的作用,一般认为括特征构建、特征提取、特征选择三个部分。
2 特征需要考虑的因素
变量过程是个比较复杂的过程,需要考虑的因素很多,比如:
变量的预测能力(最主要和最直接的衡量标准)
变量之间的相关性
变量的简单性(容易生成和使用)
变量的强壮性(不容易被绕过)
变量在业务上的可解释性(被挑战时可以解释的通)等等
3 特征构建
特征构建是指从原始数据中人工的找出一些具有物理意义的特征的过程。
特征构建比较麻烦,需要一定的经验,需要结合具体的业务,花费大量的时间去观察原始数据,思考问题的潜在形式和数据结构,以及如何将特征数据输入给预测算法。
特征构建是一个升维的过程。但是同一个维度,有不同的方法。举个栗子, 假设你的数据里现在有一个颜色的维度,比如是“itemColor”,它的三个取值分别是:red、blue、unknown。从特征构建的角度来看,你可以将其转化成一个二值特征“hascolor”,取值为1或0。其中1表示有颜色,0表示没颜色。你还可以将其转换成三个二值属性:IsRed, IsBlue and Is_Unknown。这取决于你的业务是否对其中的某一种颜色很敏感。
常用方法
特征构建是一个升维的过程,需要找到各种不同的维度,以及这些维度上的值。
列表数据类进行遍历:比如要预测房价则需要把房价面积、距离地铁口多远等信息列举出来;比如要预测西瓜是否是一个好瓜,要把瓜蒂形状、颜色、敲声等列举出来。
文本类:词频(term frequency,TF)和逆向文件频率(inverse document frequency,IDF),一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章,TF-IDF。
图像类:通过图片像素,滤波器等手段,提取出边缘、线等。
机器视觉、语音识别等,通常使用的是深度学习的算法,这些深度学习算法会自己进行特征学习,一般不需要人工手动构建特征。
属性分割和结合是特征构建时常使用的方法—— 结构性的表格数据,可以尝试组合二个、三个不同的属性构造新的特征,例如最近5天的平均值、最近10天的平均值;也可以把一个属性分解或切分,例如时间可以切分成上午、下午、晚上、周末等。
自然语言处理则使用词向量Word2vec。
机器视觉则使用卷积核。
4 特征提取
通过特征转换,将原始特征转换为新的具有明显物理意义或者统计意义或核的特征的过程,从而达到降维的效果。其实就是特征转换。
常用方法(针对每种方法具体原理将在后面进行详细介绍):
- PCA (Principal component analysis,主成分分析)
PCA的思想是通过坐标轴转换,寻找数据分布的最优子空间,从而达到降维、去相关的目的。 在数学上,是先用原始数据协方差矩阵的前N个最大特征值对应的特征向量构成映射矩阵,然后原始矩阵左乘映射矩阵,从而对原始数据降维。 PCA算法:通过协方差矩阵的特征值分解能够得到数据的主成分,以二维特征为例,两个特征之间可能存在线性关系(例如运动的时速和秒速度),这样就造成了第二维信息是冗余的。PCA的目标是发现这种特征之间的线性关系,并去除。 - LDA (Linear Discriminant Analysis,线性判别分析)
LDA的原理是将带上标签的数据(点),通过投影的方法,投影到维度更低的空间,使得投影后的点,会形成按类别区分,相同类别的点,将会在投影后更接近,不同类别的点距离越远。 LDA算法:考虑label,降维后的数据点尽可能地容易被区分。例如sklearn中的lda.LDA,不过LDA在许多算法里面都要被删除,不使用了。 - ICA(Independent component analysis,独立成分分析)
ICA认为观测到数据矩阵X是可以由未知的独立元举证S与未知的矩阵A相乘得到。ICA希望通过矩阵X求得一个分离矩阵W,使得W作用在X上所获得的矩阵Y能够逼近独立源矩阵S,最后通过独立元矩阵S表示矩阵X,所以说ICA独立成分分析提取出的特征中的独立部分。例如sklearn中的decomposition.FastICA。 PCA特征转换降维,提取的是不相关的部分,ICA独立成分分析,获得的是相互独立的属性。
5 特征选择
特征选择是剔除不相关或者冗余的特征的过程,(1) 减少特征数量、降维,使模型泛化能力更强;(2) 减少过拟合,增强对特征和特征值之间的理解。
常用方法(针对每种方法具体原理将在后面进行详细介绍):
- 去掉取值变化小的特征
假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用。 - 单变量特征选择
单变量特征选择能够对每一个特征进行测试,衡量该特征和响应变量之间的关系,根据得分扔掉不好的特征。
在单因子分析中,如果某个变量对目标变量影响不大甚至完全独立,那么可以去掉这个变量。 如果两个变量相关性很高,其中一个变量解释性比较高,另外一个变量解释性比较低时,即使解释性比较低的变量效果更好一些,我们也会将其去掉,保留解释性比较高的那个变量。当然这是在回归模型中(奇异性问题)。其他模型不需要剔除。
Pearson相关系数 Pearson Correlation
能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关(这个变量下降,那个就会上升),+1表示完全的正相关,0表示没有线性相关。Sklearn提供的f_regrssion方法能够批量计算特征的p-value;pandas的df.corr()和spark mllib的Correlation.corr()也能够获取pearson相关系数。
互信息和最大信息系数 Mutual information and maximal information coefficient (MIC)
距离相关系数 (Distance correlation)
距离相关系数是为了克服Pearson相关系数的弱点而生的。在x和x^2这个例子中,即便Pearson相关系数是0,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。
基于学习模型的特征排序 (Model based ranking) - 线性模型和正则化
在很多实际的数据当中,往往存在多个互相关联的特征,这时候模型就会变得不稳定,数据中细微的变化就可能导致模型的巨大变化(模型的变化本质上是系数,或者叫参数,可以理解成