第六章 特征工程
一 前言
近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。
二 什么是特征工程
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更
好的作用的过程;如何基于给定数据来发挥更大的数据价值就是特征工程要做的事情意义:会直接影响机器学习的效果
三 为什么需要特征工程
- 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
- 特征工程能够帮助我们提高模型的准确性、稳定性和解释性,提高机器学习模型的性能和效果
四 特征预处理
- 数据清洗
- 归一化和标准化
4.1 数据清洗
目的:目的是为了提高数据的质量和可用性,使数据更加适合进行后续的数据分析和建模工作。
数据清洗(data cleaning)是在机器学习过程中一个不可缺少的环节,其数据的清洗结果直接关系到模型效果以及最终的结论。指对原始数据进行处理和筛选,以去除数据中的错误、冗余、不一致等问题,使数据更加准确、完整和可靠。在实际的工作中,数据清洗通常占开发过程的**30%-50%**左右的时间。
4.1.1 格式内容错误数据清洗
时间、日期、数值、半全角等显示格式不一致:直接将数据转换为一类格式即可,
该问题一般出现在多个数据源整合的情况下。
内容中有不该存在的字符:最典型的就是在头部、中间、尾部的空格等问题,这
种情况下,需要以半自动校验加半人工方式来找出问题,并去除不需要的字符。
内容与该字段应有的内容不符:比如姓名写成了性别、身份证号写成手机号等问
题。
4.1.2 逻辑错误清洗
主要是通过简单的逻辑推理发现数据中的问题数据,防止分析结果走偏,主要包含以下几个步骤:
- 数据去重
- 去除/替换不合理的值
- 去除/重构**不可靠的字段值(**修改矛盾的内容)
4.1.3 去除不需要的数据
我们会尽可能多的收集数据,但是不是所有的字段数据都是可以应用到模型构建过程的,也不是说将所有的字段属性都放到构建模型中,最终模型的效果就一定会好,实际上来讲,字段属性越多,模型的构建就会越慢,所以有时候可以考虑将不要的字段进行删除操作。在进行该过程的时候,要注意备份原始数据。
4.1.4 关联性验证
如果数据有多个来源,那么有必要进行关联性验证,该过程常应用到多数据源合并的过程中,通过验证数据之间的关联性来选择比较正确的特征属性
4.1.5 数据缺省值填充
- 均值填充
- 中值填充
- 众数填充
4.2 归一化和标准化
4.2.1 为什么我们要进行归一化/标准化?
数据的归一化和标准化是**特征缩放(feature scaling)**的方法,是数据预处理的关键步骤
- 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,**容易影响(支配)目标结果,**使得一些算法无法学习到其它的特征
- 我们需要用到一些方法进行无量纲化,使不同规格的数据转换到同一规格
- 原始数据经过数据归一化/标准化处理后,各指标处于同一数量级,适合进行综合对比评价
- 避免数值问题,太大的数会引发数值问题
4.2.2 归一化(Normalization)
归一化是一种常用的数据预处理技术,用于将不同特征的数值范围映射到统一的区间内。这有助于避免某些特征对模型训练的影响过大
归一化一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位
常见的映射范围有 [0, 1] 和 [-1, 1] ,最常见的归一化方法就是 Min-Max 归一化
转换函数如下:
x n e w = x − x m i n x m a x − x m i n x_{n e w}=\frac{x-x_{m i n}}{x_{m a x}-x_{m i n}} xnew=xmax−xminx−xmin其中max为样本数据的最大值,min为样本数据的最小值。这种归一化方法比较适用在数值比较集中的情况。但是,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定,实际使用中可以用经验常量值来替代max和min。而且当有新数据加入时,可能导致max和min的变化,需要重新定义
归一化到任意区间的方法:
一般常见的数据归一化,是归一化到0-1,-1~1的区间,但在一些特殊场合下,我们需要根据实际情况归一化到其他任意区间。将数据归一化到[a,b]区间范围的方法:
(1)首先找到样本数据Y的最小值Min及最大值Max
(2)计算系数为:k=(b-a)/(Max-Min)
(3)得到归一化到[a,b]区间的数据:norY=a+k(Y-Min)实质上,归一化的一般规范函数是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin
对异常值敏感度:
4.2.3 标准化(Normalization)
原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
x n e w = x − μ σ x_{n e w}=\frac{x-\mu}{\sigma} xnew=σx−μ其中 μ \mu μ是样本数据的均值(mean), σ \sigma σ是样本数据的标准差(std)。此外,标准化后的数据保持异常值中的有用信息,使得算法对异常值不太敏感,这一点归一化就无法保证。
作用:
- 提升模型的收敛速度(加快梯度下降的求解速度)
- 提升模型的精度(消除量级和量纲的影响)
- 简化计算(与归一化的简化原理相同)
4.2.4 归一化和标准化的异同
2.3 归一化和标准化的异同
区别:
- 归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种
- 标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响
相同:
它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移
4.2.5 归一化和标准化的适用场景
数据的分布本身就服从正态分布,使用标准化
有离群值的情况:使用标准化
这里不是说有离群值时使用标准化不受影响,而是,Min-Max对于离群值十分敏感,因为离群值的出现,会影响数据中max或min值,从而使Min-Max的效果很差。相比之下,虽然使用标准化计算方差和均值的时候仍然会受到离群值的影响,但是相比于Min-Max法,影响会小一点
如果对输出结果范围有要求,用归一化
如果数据较为稳定,不存在极端的最大最小值,用归一化
如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响
五 特征提取
将任意数据(如文本或图像)转换为可用于机器学习的数字特征
- 字典特征提取(特征离散化)
- 文本特征提取
- 图像特征提取【一般图片本身就是个数组数据】
5.1 字典特征提取(特征离散化)
对字典数据进行特征值化
独热编码**(One-Hot Encoding):将每个特征的取值转化为一个二进制的向量**,向量的长度等于特征的取值个数。对于每个样本,将对应的特征取值所在位置的元素设置为1,其余元素设置为0。这种方法适用于特征取值之间没有顺序关系的情况
5.2 文本特征提取
- 中文jieba分词处理
- 词袋法
- TF-IDF
六 特征降维
6.1 降维的必要性
我们知道,解决过拟合的问题除了正则化和添加数据之外,降维就是最好的方法。降维的思路来源于维度灾难的问题,我们知道 n n n 维球的体积为:
C R n CR^n CRn
那么在球体积与边长为 2 R 2R 2R 的超立方体比值为:
lim n → 0 C R n 2 n R n = 0 \lim\limits_{n\rightarrow0}\frac{CR^n}{2^nR^n}=0 n→0lim2nRnCRn=0这就是所谓的维度灾难,在高维数据中,主要样本都分布在立方体的边缘,所以数据集更加稀疏
什么是降维:降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程
必要性:
- 数据的多重共线性:特征属性之间存在着相互关联关系。多重共线性会导致解的空间不稳定,从而导致模型的泛化能力弱
- 高纬空间样本具有稀疏性,导致模型比较难找到数据特征
- 过多的变量会妨碍模型查找规律
- 仅仅考虑单个变量对于目标属性的影响可能忽略变量之间的潜在关系
降维目的:
- 减少特征属性的个数
- 确保特征属性之间是相互独立的
正是因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大
- 使得数据集更易使用
- 降低算法的计算开销
- 去除噪声
- 使得结果容易理解
降维的两种方式:
特征选择
主成分分析和线性判别分析法(可以理解是一种特征提取的方式 )其余分类方式:
直接删除:Lasso
线性降维:PCA,可加性,成比例
非线性降维:KPCA,流行降维,lsomap,LEE
6.2 特征选择
数据中包含冗余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征
特征选择的方法主要有以下三种:
- Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,从而选择特征;常用方法包括方差选择法、相关系数法、卡方检验、互信息法等
- Wrapper:包裹法,根据目标函数(通常是预测效果评分),每次选择若干特征或者排除若干特征;常用方法主要是递归特征消除法
- Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权重系数,根据系数从大到小选择特征;常用方法主要是基于惩罚项的特征选择法
6.2.1 Filter过滤法
6.2.1.1 方差选择法
特征对于区分不同类别的样本没有太大的贡献,因此可以将其删除,从而减少特征维度
先计算各个特征属性的方差值,然后根据阈值,获取方差大于阈值的特征。
6.2.1.2 相关系数法
评估特征与目标变量之间的相关性。它可以帮助我们确定哪些特征与目标变量有较强的线性相关性,从而选择最相关的特征
先计算各个特征属性对于目标值的相关系数以及阈值K,然后获取K个相关系数最大的特征属性。(备注:根据目标属性y的类别选择不同的方式)
6.2.1.3 卡方检验
是一种用于检验两个分类变量之间是否存在显著关联的统计方法。它基于观察频数与期望频数之间的差异来判断两个变量之间的关系是否是由于随机因素引起的
检查定性自变量对定性因变量的相关性
6.2.2 Wrapper:包装法
递归特征消除法:
通过递归地训练模型并剔除最不重要的特征来选择最佳的特征子集。它基于模型的性能来判断特征的重要性,可以用于降低特征维度,提高模型的泛化能力和解释性
使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练
6.2.3 Embedded:嵌入法
基于惩罚项的特征选择法:
通过在模型训练过程中引入惩罚项来选择特征的方法。它可以通过惩罚那些对模型性能贡献较小的特征,从而实现特征选择和模型训练的同时进行
使用基于惩罚项的基模型,进行特征选择操作;L1正则,容易产生稀疏解,自动降维
6.3 主成分分析和线性判别分析法
这两种方法的本质都是将原始数据映射到维度更低的样本空间中
为了寻找这个子空间,我们基本想法是:
- 所有数据在子空间中更为分散
- 损失的信息最小
原来的数据很有可能各个维度之间是相关的,于是我们希望找到一组 p p p 个新的线性无关的单位基 u i u_i ui,降维就是取其中的 q q q 个基。于是对于一个样本 x i x_i xi,经过这个坐标变换后:
x i ^ = ∑ i = 1 p ( u i T x i ) u i = ∑ i = 1 q ( u i T x i ) u i + ∑ i = q + 1 p ( u i T x i ) u i \hat{x_i}=\sum\limits_{i=1}^p(u_i^Tx_i)u_i=\sum\limits_{i=1}^q(u_i^Tx_i)u_i+\sum\limits_{i=q+1}^p(u_i^Tx_i)u_i xi^=i=1∑p(uiTxi)ui=i=1∑q(uiTxi)ui+i=q+1∑p(uiTxi)uiPCA是为了让映射后的样本具有更大的发散性,PCA是无监督的学习算法;LDA是为了让映射后的样本有最好的分类能,LDA是有监督学习算法
6.3.1 主成分分析(Principal Component Analysis,PCA)
通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分;主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征
6.3.1.1 作用机理
算法过程:
- 第一个新坐标轴选择是原始数据中方差最大的方向
- 第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的
- 依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0
- 于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴
- 事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理
我们如何得到这些包含最大差异性的主成分方向呢?
事实上,通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维
由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方矩阵实现PCA算法
6.3.1.2 方差与协方差
对于数据X的散度矩阵为 X X T XX^T XXT 。其实协方差矩阵和散度矩阵关系密切,散度矩阵就是协方差矩阵乘以(总数据量-1)。因此它们的特征值和特征向量是一样的。这里值得注意的是,散度矩阵是SVD奇异值分解的一步,因此PCA和SVD是有很大联系
6.3.1.3 特征值分解与SVD分解
6.3.1.3.1 PCA与KPCA
6.3.1.3.2 特征值分解
6.3.1.3.3 SVD分解
6.3.1.4 PCA算法两种实现方法
6.3.1.4.1 基于特征值分解协方差矩阵实现PCA算法
6.3.1.4.2 基于SVD分解协方差矩阵实现PCA算法
6.3.2 线性判别分析法(Linear Discriminant Analysis)
LDA的思想是:最大化类间均值,最小化类内方差。将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近
6.3.2.1 类间散度与类内散度
目标函数:
J ( u ) = u T S b u u T S w u J(u)={\frac{u^{T}S_{b}u}{u^{T}S_{w}u}} J(u)=uTSwuuTSbu
6.3.2.2 算法过程
6.4 LDA与PCA对比
相同:
- 两者均可用于数据降维
- 两者在降维时均使用了矩阵特征分解的思想
- 两者都假设数据符合高斯分布
不同点:
LDA是有监督的降维方法,而PCA是无监督降维方法
当总共有K个类别时,LDA最多降到K-1维,而PCA没有这个限制
LDA除了用于降维,还可以用于分类
LDA主要用于分类,PCA主要用于数据预处理和可视化
LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优(如下图的左图)。当然,某些数据分布下PCA比LDA降维较优(如下图的右图)