机器学习之特征工程
目录大纲
- 特征工程是什么?
- 特征工程的重要性
- 特征工程子问题:
1.特征处理
2.Feature Selection(特征选择)
3.Feature Extraction(特征提取)
4.Feature construction(特征构造)
特征工程的思维导图:
如果浏览,建议下载到本地查看特征工程是什么?
想要预测模型性能达到最佳时,你要做的不仅是要选取最好的算法,还要尽可能的从原始数据中获取更多的信息。应该如何为预测模型得到更好的数据呢?
简而言之,特征工程就是一个把原始数据转变成特征的过程,这些特征可以很好的描述这些数据,并且利用它们建立的模型在未知数据上的表现性能可以达到最优(或者接近最佳性能)。
特征工程的重要性
坊间常说:“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。
首先,我们大家都知道,数据特征会直接影响我们模型的预测性能。你可以这么说:“选择的特征越好,最终得到的性能也就越好”。这句话说得没错,但也会给我们造成误解。事实上,你得到的实验结果取决于你选择的模型、获取的数据以及使用的特征,甚至你问题的形式和你用来评估精度的客观方法也扮演了一部分。此外,你的实验结果还受到许多相互依赖的属性的影响,你需要的是能够很好地描述你数据内部结构的好特征。
(1)特征越好,灵活性越强:
只要特征选得好,即使是一般的模型(或算法)也能获得很好的性能,因为大多数模型(或算法)在好的数据特征下表现的性能都还不错。好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护。
(2)特征越好,构建的模型越简单:
有了好的特征,即便你的参数不是最优的,你的模型性能也能仍然会表现的很nice,所以你就不需要花太多的时间去寻找最有参数,这大大的降低了模型的复杂度,使模型趋于简单。
(3)特征越好,模型的性能越出色
显然,这一点是毫无争议的,我们进行特征工程的最终目的就是提升模型的性能。
特征工程子问题
特征工程主要包括:
- 特征处理
- Feature Selection(特征选择)
- Feature Extraction(特征提取)
- Feature construction(特征构造)
1. 特征处理
特征处理分类
特征处理分为:数值型,类别型,时间型,文本型,统计型和组合特征
1)数值型
- 幅度调整,归一化:幅度常控制在[0,1]
- 离散化:连续值分段变成类别型,1个值映射为一个向量,离散化后引入非线性,如年龄为变量,可让老人和小孩同时获得高权重
2)类别型
-
one-hot编码/哑变量:如小孩,青年,老人->[1,0,0],[0,1,0],[0,0,1]
-
hash分桶(类别很多,较稀疏):
- 例1:使用聚类将userId根据某些特征分为几类
-
例2:如下图是将一个词典分成三个桶,每个桶可能代表某个领域内的词,两句话如果在同一个同中出现的单词数相同,可能说明他们在某一领域内指代性相同,为每句话构造了一个新向量
hash分桶
-
Histogram映射:把某个特征与target做后验关联度的统计,以统计量表示该特征
- 例子:如特征-男/女,target-爱好,统计P(爱好|性别),得到 男:[1/3,2/3,0],可表示男生1/3喜欢散步,2/3喜欢足球,没有喜欢看电视剧;用爱好比例对性别进行编码,得到的统计特征之间map到特征向量中,可以与原性别特征[1,0]同时存在
3)时间型
- 时间型特征可分为数值型和类别型,时间型数据可以表示不同时间人们心态和行为存在差别,可用于区分人群,商品推荐等
- 数值型:网页停留时间,上次浏览离现在间隔时间
- 类别型:月、周、日、时等
4)文本型
-
词袋(去停用词)、word2vec
-
TF-IDF权重
:表示一个词对一个样本或样本集的重要程度
- TF(w)=(词w在当前文中出现的次数)/(w在全部文档中出现的次数)
- IDF(w)=ln(总文档数/含w的文档数)
- TF-IDF权重: TF*IDF
5) 统计型
- 统计特征与业务的契合度高
- 加减平均:商品价格超平均价格,连续登陆天数超平均,商品出售超平均编码
- 分位线:商品价格分位线体现用户的购买能量
- 次序型、比例型
6)组合型
- 拼接型:如userId&&category拼接可以为某个用户创建个性化特征
- 模型特征组合:如GBDT产出的特征组合路径,路径命中为1,否则为0
- 组合特征和原始特征一起放进LR中训练
2. 特征选择 Feature Selection
为什么做特征选择:
在机器学习的实际应用中,特征数量往往较多,其中可能存在不相关的特征,特征之间也可能存在相互依赖,容易导致如下的后果:
- 特征个数越多,分析特征、训练模型所需的时间就越长。
- 特征个数越多,容易引起“维度灾难”,模型也会越复杂,其推广能力会下降。
特征选择能剔除不相关(irrelevant)或亢余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化了模型,使研究人员易于理解数据产生的过程。
数据预处理完成之后,我们需要选择有意义的特征,输入机器学习的算法和模型进行训练,通常来说,从两个方面考虑来选择特征:
- 是否发散
- 是否相关
特征选择的三种方法:
1. Filter方法
其主要思想是:对每一维的特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该维特征的重要性,然后依据权重排序。它主要侧重于单个特征跟目标变量的相关性。
优点:计算时间上较高效,对于过拟合问题也具有较高的鲁棒性。
缺点:倾向于选择冗余的特征,因为他们不考虑特征之间的相关性,有可能某一个特征的分类能力很差,但是它和某些其它特征组合起来会得到不错的效果。
主要的方法有:
-
Variance selection (方差选择法)
使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
-
Chi-squared test (卡方检验)
经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:
不难发现,这个统计量的含义简而言之就是自变量对因变量的相关性。
-
information gain (信息增益)
经典的互信息(信息增益)也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:
信息增益公式
2. Wrapper方法
其主要思想是:将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法,如GA,PSO,DE,ABC等;详见“优化算法——人工蜂群算法(ABC)”,“ 优化算法——粒子群算法(PSO) ”。
wrapper方法实质上是一个分类器,封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准,经过比较选出最好的特征子集。常用的有逐步回归(Stepwise regression)、向前选择(Forward selection)和向后选择(Backward selection)。
优点:考虑了特征与特征之间的关联性
缺点:当观测数据较少时容易过拟合,而当特征数量较多时,计算时间又会增长。
主要方法有:
recursive feature elimination algorithm(递归特征消除算法)
递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
3. Embedded方法
其主要思想是:在模型既定的情况下学习出对提高模型准确性最好的属性。这句话并不是很好理解,其实是讲,在确定模型的过程中,挑选出那些对模型的训练有重要意义的属性。
主要方法:
-
基于惩罚项的特征选择法
-
基于树模型的特征选择法
-
降维
当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。
3. 特征提取 Feature Extraction
原则上来讲,特征提取应该在特征选择之前。特征提取的对象是原始数据(raw data),它的目的是自动地构建新的特征,将原始特征转换为一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征。比如通过变换特征取值来减少原始数据中某个特征的取值个数等。对于表格数据,你可以在你设计的特征矩阵上使用主要成分分析(Principal Component Analysis,PCA)来进行特征提取从而创建新的特征。对于图像数据,可能还包括了线或边缘检测。
常用的方法有:
- PCA (Principal component analysis,主成分分析)
- ICA (Independent component analysis,独立成分分析)
- LDA (Linear Discriminant Analysis,线性判别分析)
- 对于图像识别中,还有SIFT方法。
4. 特征构造 Feature construction
特征构建指的是从原始数据中人工的构建新的特征。我们需要人工的创建它们。这需要我们花大量的时间去研究真实的数据样本,思考问题的潜在形式和数据结构,同时能够更好地应用到预测模型中。
特征构建需要很强的洞察力和分析能力,要求我们能够从原始数据中找出一些具有物理意义的特征。假设原始数据是表格数据,一般你可以使用混合属性或者组合属性来创建新的特征,或是分解或切分原有的特征来创建新的特征。
总结
参考资料
[1]From 参考美团的"机器学习中的数据清洗与特征处理综述"
[2]From特征工程与模型调优