前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >特征工程

特征工程

作者头像
爱编程的小明
发布2022-09-06 14:02:09
发布2022-09-06 14:02:09
1.1K0
举报
文章被收录于专栏:小明的博客小明的博客

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

特征工程本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。一般来说包含以下几个方面的内容:

数据预处理

一般来说,我们搜集到的数据都要经过一定处理来消除存在的一些问题才能用于模型的训练(原数据信息的冗余问题、量纲不同问题、缺失值问题),因此数据预处理工作是非常有必要的!

缺失值处理

对缺失值需要进行插补以补全,才能作为机器学习模型训练的数据使用。 常用的插补方法

  • 均值插补
  • 同类均值插补
  • 众数插补
  • 建模预测:利用机器学习算法对数据集的缺失值进行预测
  • 高维映射:将属性映射到高维空间,采用独热编码技术,将包含K个离散取值范围的属性值扩展为K+1个属性值,若该属性值确实,则将扩展后的第K+1个属性值设为1.这种方法较为精确,保留了所有信息,也未添加任何额外信息,但若预处理时所有的变量都这么处理会大大增加数据的维度。这样做的好处是完整保留了原始数据的全部信息,不用考虑缺失值;缺点是计算量大大提升且只有在样本量非常大的时候效果才好
  • 多重插补:待插补的值是随机的,实践时通常是估计待插补的值,并叠加不同的噪声,形成多组可选插补值,

插补处理只是将为知值以人们的主观估计值,不一定完全符合客观事实。在一些情况下,根据所在具体问题领域的理解,需要手动插补缺失值,插补的效果会更好。

无量纲化

Z-score标准化

标准化是依照特征矩阵的列处理数据,其通过求 z-score 的方法,将样本的特征值转换到同一量纲下**。前提是数据要服从正态分布**!

区间放缩法

一般利用最大最小值放缩到[0,1]区间

归一化

归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为 “单位向量”。归一化和单位化比较像。

注意标准化与归一化的区别: 简单来说,标准化是依照特征矩阵的列处理数据,其通过求 z-score 的方法,将样本的特征值转换到同一量纲下。 归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为 “单位向量”。

对数标准化

对于特定数据集,采用对数函数进行变换会取得更好的分析效果。优点:

  • 对数函数在其定义域内是单调增函数,取对数后不会改变数据的相对关系;
  • 取对数能够缩小数据的绝对数值,方便计算;
  • 取对数后,可以将乘法计算转换为加法计算;
  • 某些情况下,在数据的整个值域中,不同区间带来的影响不同,对数函数自变量x的值越小,函数值y的变化越快,也就是说,对数值小的部分差异的敏感程度比数值大的部分的差异敏感程度更高
  • 取对数之后不会改变数据的性质和相关关系,但压缩了变量的尺度,使得数据更加平稳,消弱了模型的共线性、异方差性等

由于三角函数中的反正切函数与对数函数具有相似的性质,也可以使用反正切函数实现数据的标准化转换。(

x^{\prime}=\frac{2 \arctan (x)}{\pi}

)

定量特征二值化

特征二值化是将数值型的属性按照阈值转换为布尔值(1或0)的属性,主要目的是将特征的取值变到我们想要研究的问题上去。

对定性特征哑编码

为了使计算机能够有效地从数据集中进行机器学习,我们需要把数据库中的非数值型字段进行编码,但又不能简单地用数值来对分类属性值进行编码。例如将“中国”、“美国”、“英国”分别用1,2,3进行编码,机器学习的估计器将认为这些属性值是有序的。 将分类特征转化为能够被机器学习模型使用的编码是one-of-K或one-hot编码,称为独热编码,又称一位有效编码。 采用N位状态寄存器来对N个可能的取值进行编码,每个状态都由独立的寄存器来表示,并且在任意时刻只有其中一位有效。例如,例如对六个状态(即分类属性的6个值)进行编码: 自然编码:000,001,010,……101 独热编码:000001,000010,000100,001000,010000,100000. 优点:可以处理非数值属性,一定程度上扩充了特征。

数据变换

数据变换在我看来更像是一种特征探索的过程,相当于是在已有的特征基础上探究新的可能的特征。 常见的数据变换有基于多项式的、基于指数函数的、基于对数函数的。4 个特征,度为 2 的多项式转换公式如下:

特征选择

特征选择的好处:更容易理解,减少训练周期和避免维度诅咒。

通常来说,从两个方面考虑来选择特征:

  • 特征是否发散:

如果一个特征不发散,例如方差接近于 0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。

  • 特征与目标的相关性:

这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。

数据本身的波动特征以及与目标的相关程度的问题 根据特征选择的形式又可以将特征选择方法分为 3 种:

Filter

过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。

Wrapper

包装法,根据目标函数(通常是预测效果评分/学习器的性能),每次选择若干特征,或者排除若干特征。 优点是直接针对特定学习器进行优化,因此通常包裹式特征选择比过滤式特征选择更好 缺点是由于特征选择过程需要多次训练学习器,故计算开销要比过滤式特征选择要大得多。 对学习器的评价准则

  • 距离度量:差异性或者分离性的度量,常用的距离度量方法有欧式距离等。
  • 信息增益度量:特征f的信息增益定义为使用特征f的先验不确定性与期望的后验不确性之间的差异。若特征f1的信息增益大于特征f2的信息增益,则认为特征f1优于特征f2。
  • 依赖性度量:又称为相关性度量,通常采用皮尔逊相关系数(Pearson Correlation Coefficient)来计算特征f与类别C之间的相关度,相关性好,则特征更优。属性之间的相关性越低越好。
  • 一致性度量:一致性度量观察两个样本,若它们的特征值相同,且所属类别也相同,则认为它们是一致的。尝试找出与原始特征集具有一样辨别能力的最小的属性子集。
  • 分类器错误率度量:分类器错误率度量使用学习器的性能作为最终的评价阈值。它倾向于选择那些在分类器上表现较好的子集。

稳定性选择是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。

Embedded

嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于 Filter 方法,但是是通过训练来确定特征的优劣。

典型的嵌入式特征选择方法是决策树算法,如ID3,C4.5以及CART算法等。决策树算法在树增长过程的每个递归步都必须选择一个特征,将样本划分成较小的子集。选择特征的依据是划分后子节点的纯度。划分后子节点越纯,则说明划分效果越好。决策树生成的过程也就是特征选择的过程。

特征选择可以使用ITMO_FS,它是一个特征选择库,它可以为 ML 模型进行特征选择。拥有的观察值越少,就越需要谨慎处理过多的特征,以避免过度拟合。所谓“谨慎”意思是应该规范你的模型。通常一个更简单的模型(更少的特征),更容易理解和解释。

特征降维

随着数据的生成和数据收集量的不断增加,数据可视化、机器学习变得越来越困难,数据的存储、传输也变得异常困难。这不得不迫使人们开展数据压缩技术的研究。 数据压缩技术可以帮助对数据进行存储和分析。 特征降维将对数据集和机器学习带来如下好处:

  • 随着特征维度降低,数据存储所需的空间会随之减少;
  • 低维数据有助于减少计算和机器学习训练用时;
  • 一些算法在高维度数据上容易表现不佳,降维可提高算法可用性;
  • 降维可以用删除冗余特征解决多重共线性问题;
  • 降维有助于数据可视化。

特征降维方法一般可分为线性降维和非线性降维两大类,非线性降维又分为基于核函数的方法和基于特征值的方法。降维算法有主成分分析、奇异值分解和线性判别分析,但需要清楚地知道想用哪种工具来寻找模式或从数据中推断出新的信息。其中主成分分析和线性判别分析都属于线性降维方法

主成分分析(PCA)

PCA(Principal Component Analysis)主成分分析,提取数据集的主要特征成分,忽略次要特征成分,达到降维目的。 PCA通过线性变换,将N维空间的原始数据变换到一个较低的R维空间(R<N),达到降维目的。 在降维过程中,不可避免的要造成信息损失。如原来在高维空间可分的点,在低维空间可能变成一个点,变得不可分。因此,要在降维过程中尽量减少这种损失。 为使样本投影到低维空间后尽可能分散,它们的方差要尽可能大。这就构成了PCA的基本思想。 具体过程为选取一组N个R维的正交基组成的矩阵P,然后令P左乘数据集X得到变换后的数据集的X’,进而实现了数据集的维数由N变换为R(R<N) 这样的正交变换可能会导致原本可分的空间变得不可分于是PCA问题就变成了一个正交基的优化问题,故需要寻找一组正交基使得样本数据尽量分散。 评价数据的分散程度则需要借助方差。另一方面,我们还希望变换后各特征之间的相关性尽可能小,评价相关性则利用协方差。 则降维问题的优化目标为:将一组N维向量降为R维(R大于0,小于N),其目标是选择R个单位(模为1)正交基,使得原始数据变换到这组基上后,各特征两两间协方差为0,而特征的方差则尽可能大。

为了使方差尽量大,协方差为0,其实就是寻找一个P将协方差矩阵给对角化,且需要留出最大的R个特征值。 故对于M条N维数据,PCA算法步骤为:

  1. 写出N行M列矩阵X
  2. 将X的每一行()零均值化
  3. 求出协方差矩阵C=\frac{1}{M}AA^T
  4. 求出协方差矩阵的特征值和对应的特征向量
  5. 将特征向量按对应特征值大小从上到下按行拍成矩阵,取前R行组成矩阵P
  6. Y=PX即降维后的数据。

奇异值分解

奇异值分解是指将一个矩阵拆分成三个不同的矩阵的一种方法。

与PCA算法相比,两者都可以对数据进行降维处理。但PCA跳过了不太重要的成分,而SVD只是把它们变成特殊的数据,表示为三个不同的矩阵,更容易操作和分析。当涉及到概率方法时,对于更抽象的问题,最好使用线性判别分析算法。

线性判别分析(LDA)

LDA(Linear Discriminant Analysis), 线性判别分析,是一种有监督学习的降维技术,它的数据集的每个样本是有类别标签的。 LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。 即数据集投影到低维空间后,希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的远。 数据集合标准化、正则化和特征降维都是为应对不同数量级对机器学习性能的影响,减小计算量的一种无奈之举,实际上这些预处理操作都会不可避免地造成信息的丢失

PCA 和 LDA 有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是 PCA 和 LDA 的映射目标不一样:PCA 是为了让映射后的样本具有最大的发散性;而 LDA 是为了让映射后的样本有最好的分类性能。所以说 PCA 是一种无监督的降维方法,而 LDA 是一种有监督的降维方法。 它经常被用于人脸识别、客户识别和医学领域,以识别病人的疾病状况。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据预处理
    • 缺失值处理
    • 无量纲化
      • Z-score标准化
      • 区间放缩法
      • 归一化
      • 对数标准化
    • 定量特征二值化
    • 对定性特征哑编码
    • 数据变换
  • 特征选择
    • Filter
    • Wrapper
    • Embedded
  • 特征降维
    • 主成分分析(PCA)
    • 奇异值分解
    • 线性判别分析(LDA)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档