【Python算法】数据降维概述
数据降维概述
1.数据降维概述
所谓的数据降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中,可以解决大规模特征下的数据显示问题,使得数据集更易使用,降低后续算法的计算,消除噪声影响并使得结果更易理解。 数据降维的方法有很多,可从线性或非线性角度对其简单分类。 线性降维是指通过降维所得到的低维数据能保持高维数据点之间的线性关系,主要包括
主成分分析(Principal Component Analysis,PCA)、线性判别分析(Linear Discriminant Analysis,LDA);
非线性降维一类是基于核的,如 KPCA(Kernel PCA);另一类就是通常所说的流形学习:从高维采样数据中恢复出低维流形结构,即找到高维空间中的低维流形,并求出相应的嵌入映射,如:等距映射(Isomap)、局部线性嵌入(Locally Linear Embedding,LLE)等。 整体来说,线性方法计算块,复杂度低,但对复杂的数据降维效果较差。
2.有监督和无监督
有监督学习:对具有概念标记(分类)的训练样本进行学习,以尽可能对训练样本集外的数据进行标记(分类)预测。这里,所有的标记(分类)是已知的。因此,训练样本的岐义性低。
无监督学习:对没有概念标记(分类)的训练样本进行学习,以发现训练样本集中的结构性知识。这里,所有的标记(分类)是未知的。因此,训练样本的岐义性高。聚类就是典型的无监督学习。
3.线性降维
主成分分析(Principal Component Analysis,PCA)是最常用的线性降维方法,是一种无监督的降维方法。它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。常用于高维数据的降维,例如二维数据集降维就是把点投射成一条线,数据集的每个样本都可以用一个值表示,同样也可以利用主成分分析将三维的图像转换成二维的。 PCA 追求的是在降维之后能够最大化保持数据的内在信息,并通过衡量在投影方向上的数据方差的大小来衡量该方向的重要性,但是这样投影以后对数据的区分作用并不大,反而可能使得数据点揉杂在一起无法区分。
下图是PCA的投影的一个表示,黑色的点是原始的点,带箭头的虚线是投影的向量,pc1表示特征值最大的特征向量,pc2表示特征值次大的特征向量,两者是彼此正交的,因为这原本是一个2维的空间,所以最多有两个投影的向量。
4.非线性降维
主成分分析(PCA)和线性判别分析(LDA)能很好地解决呈线性关系的数据的降维,但是对于有非线性结构的数据,这种变换会丢失部分重要信息。事实上,存在非线性关系的数据集并不少见,例如将一把椅子平移,那各个平移点可看做存在线性关系,但将其旋转时,就变为了非线性关系。这种情况下,通常采用流形学习的方法。
等距映射(Isomap)是一种较为经典的非线性降维算法,其主要目标是找到给定的高维流形对应的低维嵌入,使得高维流形上数据点间的近邻结构在低维嵌入中得以保持。算法通过将每个数据点和临近的数据点连接构成图,用图论中的dijkstra距离来估计流形的测地距离。其创新之处在于计算高维流形上数据点间距离时,不是用传统的欧式距离,而是采用微分几何中的测地线距离,并且找到了一种用实际输入数据估计其测地线距离的算法(即图论中的最小路径逼近测地线距离)。Isomap的优点在于:
(1) 求解过程依赖于线性代数的特征值和特征向量问题,保证了结果的稳健性和全局最优性;
(2) 能通过剩余方差判定隐含的低维嵌入的本质维数;
(3) Isomap方法计算过程中只需要确定唯一的一个参数(近邻参数k或邻域半径e)。在Python中,Scikit-Learn库提供了用于等距映射的类,其构造函数为:
(4) sklearn.manifold.Isomap(n_neighbors=5,n_components=2,eigen_solver='auto',tol=0,max_iter=None,path_method='auto',neighbors_algorithm='auto', n_jobs=1)。局部线性嵌入(Locally linear embedding,LLE)也是一种非线性降维算法,它能够使降维后的数据较好地保持原有流形结构,LLE 是许多其它流形学习方法的基础。LLE 算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:
(1) 寻找每个样本点的 k 个近邻点;
(2) 由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;
(3) 由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。 在 Python 中,Scikit-Learn 库提供了用于局部线性嵌入的类,其构造函数为:
sklearn.manifold.LocallyLinearEmbedding(n_neighbors=5,n_components=2,reg=0.001,eigen_solver='auto',tol=1e-06,max_iter=100,method='standard',hessian_tol=0.0001,modified_tol=1e-12,neighbors_algorithm='auto',random_state=None, n_jobs=1)。
通过修改参数method可以设置局部线性嵌入的具体版本,如使用标准的局部线性嵌入则将该参数设为 standard。
5.数据标准化
数据标准化处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理。最基本的标准化方法有:
(1) 中心化:将变量的每一个数值减去该变量的均值;
(2) 缩放:将变量的每一个数值除以该变量的标准差;
(3) 归一化:对变量的每一个数值做中心化和缩放处理,使得每一个数值代表其与均值相差的标准差的倍数。
在Python中,Scikit-Learn库提供了用于数据标准化的类,其构造函数为:
sklearn.preprocessing.StandardScaler(copy=True,with_mean=True, with_std=True),通过参数copy可以设置是否在原数据上进行标准化,默认为 True 即标准化后生成新的拷贝,通过参数 with_mean 和 with_std 决定是否中心化和缩放,默认都为 True。
6.常用降维方法简介
几种常用的降维方法有:缺失值比率、低方差滤波、高相关滤波、随机森林/组合树、主成分分析、反向特征消除、前向特征构造。
(1) 缺失值的比率
数据列如果存在太多的缺失值是不可能有太多的有用信息,因此设定一个阈值,如果数据列缺失的数据大于阈值时将数据列删除。设定的阈值越大,删除的数据列越多随之维度减少的幅度也越大。
(2) 低方差过滤
和缺失值比率很相似,数据列中的数据很小的变动即方差过小时(低于预先设定的阈值)删除数据列。特别注意的是:方差是依赖于范围的,因此在应用该方法前对数据正则化处理。
(3) 高相关过滤
数据列中有相似趋势往往也存在着相似的信息,这种情况下往往一个数据列就可以参与机器学习的模型的建立了,因此我们需要计算数值列之间的相关系数和标称列之间的皮尔逊积矩系数和皮尔逊卡方值,双列的相关系数高于设定的阈值时可以减少到只有一个。提醒一下:相关量比较敏感,因此列的归一化需要一个相对有意义的相关性比较。
(4) Random Forests/Ensemble Trees
决策树的 Ensemble 也成为 RF(随机森林),除了在做有效的分类器很有用外,在特征选择方面也很有效果。一种降维的方法是针对目标属性生成一个大的和构造的树,然后使用每个属性的使用统计数据发现大多数信息的特征子集。可以生成大量层次很低的树(2 层),与每棵树正在训练总额的一小部分数量的属性。如果一个属性经常被选为最佳的,它是最有可能被保留的一个有效特征。在 RF 中分数计算的随机属性的使用统计数据告诉我们——相对于其他属性——这是最有预测力的属性。
(5) PCA(主成分分析)
主成分分析(PCA)是一种正交统计过程,将一个数据集的原始 n 坐标转换成一个新的 n 组坐标(叫做主成分)。转化的结果,第一个主成分具有最大可能的方差,在正交于(不相关)先前的主成分的限制条件下,每个成功转化后的成分都具有最高可能的方差。只保留第一个 m < n 成分降低了数据的维度,同时保留大部分的数据信息也就是变化的数据。注意, PCA 转化对原始变量的变化比例很敏感。数据列(维度)范围在应用 PCA 之前需要正则化;同时也要注意新的坐标系(PCs)不再是真正的系统变量了;PCA 在应用到你的数据集产生新的维度时也就失去了它的可解释性,如果结果的可解释性对于你的数据分析很重要,那么在针对你的项目分析时,PCA 不能作为你的首要选择转化方法。
(6) 反向特征的消除
这个方法中,在给定的迭代次数下选定的分类算法对 n 个输入特征进行训练,然后每次删除一个输入特征用相同的模型对剩下的 n-1 个输入特征训练 n 次,删除的输入特征在错误率上已产生最小的增长应该就将其删除,留给将剩余的 n-1 个输入特征。分类器接着使用 n-2 个特征作为输入,等等…每次迭代 k 产生一个模型训练 n-k 特征和一个出错率 e(k);选择一个最大可容许的错误率,我们定义的最小数量的特性必须达到所选的机器学习算法的分类器的性能。
(7) 正向特征的构建
这种方法和反向特征消除方法具有相反的处理过程。刚开始只处理一个特征,然后逐步每次添加一个特征,也就是说输入特征即特征维度在分类器的性能上产生最大的增加。就这两种算法而言,计算特别耗时而且计算量也特别大,它们实际上只适用于一个数据集已经相对具有较少的输入列(特侦维度)。
除了上面谈到的几种方法外,随机推测、NMF、自动编码器、卡方检验或信息增益、多维度等级法、一致性分析、因子分析、聚类和贝叶斯模型在数据降维上表现也不错。
- 点赞
- 收藏
- 关注作者
评论(0)