Python机器学习算法与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4 特征提取和降维

前面介绍的特征选择方法获得的特征,是从原始的数据中抽取出来的,并没有对数据进行变换。而特征提取和降维,则是对原始的数据特征进行相应的数据变换,并且通常会选择比原始特征数量少的特征,同时达到数据降维的目的。常用的特征提取和降维方法有主成分分析、核主成分分析、流形学习、t-SNE、多维尺度分析等方法。下面将对这几种方法一一进行介绍,首先将前面使用的酒数据集中每个特征进行数据标准化,程序如下:

3.4.1 主成分分析

主成分分析(Principal Component Analysis,PCA)是采用一种数学降维的方法,在损失很少信息的前提下,找出几个综合变量作为主成分,来代替原来众多的变量,使这些主成分能够尽可能地代表原始数据的信息,其中每个主成分都是原始变量的线性组合,而且各个主成分之间不相关(即线性无关)。通过主成分分析,可以从事物错综复杂的关系中找到一些主要成分(通常选择累积贡献率≥85%的前m个主成分),从而能够有效利用大量统计信息进行定性分析,揭示变量之间的内在关系,得到一些对事物特征及其发展规律的深层次信息和启发,推动研究进一步地深入。通常情况下使用的主成分个数远小于原始特征个数,所以可以起到特征提取和降维的目的。

针对准备好的酒数据集wine_x,可以使用下面的程序对其进行主成分分析,从原始数据中提取特征,在程序中获取了数据的13个主成分数据,并且可视化出每个主成分对数据的解释方差大小。程序运行后的结果如图3-16所示。

图3-16 每个主成分的解释方差大小

从图3-16中可以发现,主成分分析结果使用数据的前3个主成分即可对其进行良好的数据建模。针对获取的数据前3个主成分特征,可以在三维(3D)空间中将数据的分布进行可视化,可视化程序如下:

运行上面的程序后结果如图3-17所示,图中展示了不同类别的数据分布情况。

图3-17 主成分特征空间散点图

3.4.2 核主成分分析

PCA是线性的数据降维技术,而核主成分分析(KPCA)可以得到数据的非线性表示,进行数据特征提取的同时可以对数据进行降维。下面使用KernelPCA()函数对数据进行特征提取和降维,指定核函数时使用"rbf"核,程序如下:

运行上面的程序后结果如图3-18所示,展示了特征值的大小情况。针对该数据同样可以使用数据的前3个核主成分作为提取到的特征。

图3-18 核主成分分析的特征值情况

针对获取的数据前3个核主成分特征,可以在三维(3D)空间中将数据的分布进行可视化,可视化程序如下,程序运行后的结果如图3-19所示。

图3-19 核主成分特征空间散点图

3.4.3 流形学习

流形学习是借鉴了拓扑流形概念的一种降维方法。流形学习可以用于数据降维,当维度降低到二维或者三维时可以对数据进行可视化。因为流形学习使用近邻的距离来计算高维空间中样本点的距离,所以近邻的个数对流形降维得到的结果影响也很大。下面以前面的酒数据wine_x为例,使用流形学习对其进行特征提取并降维,获取数据的3个主要特征,并通过可视化观察样本在三维(3D)空间的位置。程序如下,程序中使用7个近邻计算距离。

程序运行后的结果如图3-20所示,从图中可以发现利用Isomap方法获得的3个特征,3种数据在三维(3D)空间分布上并不是很容易区分。

图3-20 流形学习特征提取和降维

3.4.4 t-SNE

t-SNE是一种常用的数据降维方法,同时也可以作为一种特征提取方法,针对酒数据集wine_x,使用t-SNE算法将其降维到三维(3D)空间,同时提取数据上的3个特征。程序如下,程序运行后的结果如图3-21所示。

图3-21 t-SNE特征提取和降维

观察图3-21可以发现,在t-SNE算法下三种数据的分布较容易区分,同时也表明利用提取到的特征对数据进行判别分类时会更加容易。

3.4.5 多维尺度分析

多维尺度分析是一种通过数据在低维空间的可视化,从而对高维数据进行可视化展示的方法。多维尺度分析的目标是:在将原始数据降维到一个低维坐标系中,同时保证通过降维所引起的任何形变达到最小。为了方便可视化多维尺度分析后的数据分布情况,通常会将数据降维到二维或者三维。Python中可以使用sklearn库中的MDS()函数进行数据的多维尺度分析,下面的程序将酒数据集wine_x降维到三维(3D)空间,并且将降维的结果可视化,程序运行后的结果如图3-22所示。

图3-22 多维尺度分析可视化