数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
特征工程本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。一般来说包含以下几个方面的内容:
一般来说,我们搜集到的数据都要经过一定处理来消除存在的一些问题才能用于模型的训练(原数据信息的冗余问题、量纲不同问题、缺失值问题),因此数据预处理工作是非常有必要的!
对缺失值需要进行插补以补全,才能作为机器学习模型训练的数据使用。 常用的插补方法
插补处理只是将为知值以人们的主观估计值,不一定完全符合客观事实。在一些情况下,根据所在具体问题领域的理解,需要手动插补缺失值,插补的效果会更好。
标准化是依照特征矩阵的列处理数据,其通过求 z-score 的方法,将样本的特征值转换到同一量纲下**。前提是数据要服从正态分布**!
一般利用最大最小值放缩到[0,1]区间
归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为 “单位向量”。归一化和单位化比较像。
注意标准化与归一化的区别: 简单来说,标准化是依照特征矩阵的列处理数据,其通过求 z-score 的方法,将样本的特征值转换到同一量纲下。 归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为 “单位向量”。
对于特定数据集,采用对数函数进行变换会取得更好的分析效果。优点:
由于三角函数中的反正切函数与对数函数具有相似的性质,也可以使用反正切函数实现数据的标准化转换。(
)
特征二值化是将数值型的属性按照阈值转换为布尔值(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 种:
过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
包装法,根据目标函数(通常是预测效果评分/学习器的性能),每次选择若干特征,或者排除若干特征。 优点是直接针对特定学习器进行优化,因此通常包裹式特征选择比过滤式特征选择更好 缺点是由于特征选择过程需要多次训练学习器,故计算开销要比过滤式特征选择要大得多。 对学习器的评价准则
稳定性选择是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。
嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于 Filter 方法,但是是通过训练来确定特征的优劣。
典型的嵌入式特征选择方法是决策树算法,如ID3,C4.5以及CART算法等。决策树算法在树增长过程的每个递归步都必须选择一个特征,将样本划分成较小的子集。选择特征的依据是划分后子节点的纯度。划分后子节点越纯,则说明划分效果越好。决策树生成的过程也就是特征选择的过程。
特征选择可以使用ITMO_FS,它是一个特征选择库,它可以为 ML 模型进行特征选择。拥有的观察值越少,就越需要谨慎处理过多的特征,以避免过度拟合。所谓“谨慎”意思是应该规范你的模型。通常一个更简单的模型(更少的特征),更容易理解和解释。
随着数据的生成和数据收集量的不断增加,数据可视化、机器学习变得越来越困难,数据的存储、传输也变得异常困难。这不得不迫使人们开展数据压缩技术的研究。 数据压缩技术可以帮助对数据进行存储和分析。 特征降维将对数据集和机器学习带来如下好处:
特征降维方法一般可分为线性降维和非线性降维两大类,非线性降维又分为基于核函数的方法和基于特征值的方法。降维算法有主成分分析、奇异值分解和线性判别分析,但需要清楚地知道想用哪种工具来寻找模式或从数据中推断出新的信息。其中主成分分析和线性判别分析都属于线性降维方法
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算法步骤为:
奇异值分解是指将一个矩阵拆分成三个不同的矩阵的一种方法。
与PCA算法相比,两者都可以对数据进行降维处理。但PCA跳过了不太重要的成分,而SVD只是把它们变成特殊的数据,表示为三个不同的矩阵,更容易操作和分析。当涉及到概率方法时,对于更抽象的问题,最好使用线性判别分析算法。
LDA(Linear Discriminant Analysis), 线性判别分析,是一种有监督学习的降维技术,它的数据集的每个样本是有类别标签的。 LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。 即数据集投影到低维空间后,希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的远。 数据集合标准化、正则化和特征降维都是为应对不同数量级对机器学习性能的影响,减小计算量的一种无奈之举,实际上这些预处理操作都会不可避免地造成信息的丢失。
PCA 和 LDA 有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是 PCA 和 LDA 的映射目标不一样:PCA 是为了让映射后的样本具有最大的发散性;而 LDA 是为了让映射后的样本有最好的分类性能。所以说 PCA 是一种无监督的降维方法,而 LDA 是一种有监督的降维方法。 它经常被用于人脸识别、客户识别和医学领域,以识别病人的疾病状况。