数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
特征工程本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。一般来说包含以下几个方面的内容:
数据预处理
一般来说,我们搜集到的数据都要经过一定处理来消除存在的一些问题才能用于模型的训练(原数据信息的冗余问题、量纲不同问题、缺失值问题),因此数据预处理工作是非常有必要的!
缺失值处理
对缺失值需要进行插补以补全,才能作为机器学习模型训练的数据使用。
常用的插补方法
-
均值插补
-
同类均值插补
-
众数插补
-
建模预测:利用机器学习算法对数据集的缺失值进行预测
-
高维映射:将属性映射到高维空间,采用独热编码技术,将包含 K 个离散取值范围的属性值扩展为 K+1 个属性值,若该属性值确实,则将扩展后的第 K+1 个属性值设为 1.这种方法较为精确,保留了所有信息,也未添加任何额外信息,但若预处理时所有的变量都这么处理会大大增加数据的维度。这样做的好处是完整保留了原始数据的全部信息,不用考虑缺失值;缺点是计算量大大提升且只有在样本量非常大的时候效果才好
-
多重插补:待插补的值是随机的,实践时通常是估计待插补的值,并叠加不同的噪声,形成多组可选插补值,
插补处理只是将为知值以人们的主观估计值,不一定完全符合客观事实。在一些情况下,根据所在具体问题领域的理解,需要手动插补缺失值,插补的效果会更好。
无量纲化
Z-score 标准化
标准化是依照特征矩阵的列处理数据,其通过求 z-score 的方法,将样本的特征值转换到同一量纲下**。前提是数据要服从正态分布**!
区间放缩法
一般利用最大最小值放缩到区间
归一化
归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为 “单位向量”。归一化和单位化比较像。
注意标准化与归一化的区别:
简单来说,标准化是依照特征矩阵的列处理数据,其通过求 z-score 的方法,将样本的特征值转换到同一量纲下。
归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为 “单位向量”。
对数标准化
对于特定数据集,采用对数函数进行变换会取得更好的分析效果。优点:
-
对数函数在其定义域内是单调增函数,取对数后不会改变数据的相对关系;
-
取对数能够缩小数据的绝对数值,方便计算;
-
取对数后,可以将乘法计算转换为加法计算;
-
某些情况下,在数据的整个值域中,不同区间带来的影响不同,对数函数自变量 x 的值越小,函数值 y 的变化越快,也就是说,对数值小的部分差异的敏感程度比数值大的部分的差异敏感程度更高;
-
取对数之后不会改变数据的性质和相关关系,但压缩了变量的尺度,使得数据更加平稳,消弱了模型的共线性、异方差性等。
由于三角函数中的反正切函数与对数函数具有相似的性质,也可以使用反正切函数实现数据的标准化转换。()
定量特征二值化
特征二值化是将数值型的属性按照阈值转换为布尔值(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 方法可以参考文章多元统计分析,LDA 具体可参考文章线性分类
数据集合标准化、正则化和特征降维都是为应对不同数量级对机器学习性能的影响,减小计算量的一种无奈之举,实际上这些预处理操作都会不可避免地造成信息的丢失。