数据降维方法小结

article/2025/9/14 4:42:48

  数据的形式是多种多样的,维度也是各不相同的,当实际问题中遇到很高的维度时,如何给他降到较低的维度上?前文提到进行属性选择,当然这是一种很好的方法,这里另外提供一种从高维特征空间向低纬特征空间映射的思路。

数据降维的目的

  数据降维,直观地好处是维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及无用信息的摈弃

数据降维的方法

  主要的方法是线性映射和非线性映射方法两大类。

线性映射

  线性映射方法的代表方法有:PCA(Principal Component Analysis),LDA(Discriminant Analysis)

PCA方法简介

  主成分分析的思想,就是线性代数里面的K-L变换,就是在均方误差准则下失真最小的一种变换。是将原空间变换到特征向量空间内,数学表示为 Ax=λx
  特征向量和特征值的意义:分别表示不同频率及其幅度。
  特征向量和特征值的直白理解:想在特征空间内找到某个向量 x ,使得其满足Ax=λx。这个式子可以这样理解, A 是空间内的运动,x经过运动 A 后,保持方向不变(仍是x的方向),只是大小伸缩了 λ 倍。这样我们找到了 k 个这样的向量βk
   A[β1,β2,...,βk]=[λ1β1,λ2β2,...,λkβk]
  当然在实际用时,取最大的前几个足矣。
  PCA计算是用的协方差矩阵 U 的分解特征向量。
1. 样本矩阵去中心化(每个数据减去对应列的均值),得到Am,n Am,n 表示 m n维的数据。
  2. U 表示样本矩阵A的协方差矩阵( ATA = U ,因为去中心化后的ATA即协方差)
   E(XX0)(YY0)=mi=11m(xix0)(yiy0)
  期望的定义: E(x)=xip(xi)
  3. U=[β]Λ[β]1
  4. A [β1,β2,βk]方向上变换(注意选择 λ 大的特向映射)。
   U=cov(1,1)cov(2,1)    ............cov(n,1)cov(1,2)cov(2,2)cov(n,2).........cov(1,n)cov(2,n)cov(n,n)
  其中数字表示相应第几个属性。
  为什么要用协方差矩阵来特向分解呢?
  协方差矩阵表征了变量之间的相关程度(维度之间关系)。
  对数据相关性矩阵的特向分解,意味着找到最能表征属性相关性的特向(最能表征即误差平方最小)。PCA一开始就没打算对数据进行特向分解,而是对数据属性的相关性进行分析,从而表示出最能代表属性相关性的特向,然后将原始数据向这些特向上投影。所以,有的地方说PCA去相关。
  PCA的原理推导:由最小误差平方准则引入,比(无)较(法)蛋(理)疼(解),暂时不做推导了(参考《模式分类》3.8节)。
  PCA优缺点:
  优点:1)最小误差。2)提取了主要信息
  缺点:1)计算协方差矩阵,计算量大
  上述PCA中的特向分解,必须为方阵,这个条件是很苛刻的。有没有直接对任意矩阵的分解呢,答案是有的,他的名字叫SVD分解。
  SVD分解用来找到矩阵的主要部分。可以直接对数据矩阵进行分解
   BmnUmkkkVTnk
  其中 UmkVnk 是正交矩阵。
   BmnVnkUmkkkVTnkVnk
   BmnVnkUmkkkA^mk 实现了降维。
   UTmkBmnUTmkUmkkkVTnkkkVTnkA^kn 实现了压缩数据。
  SVD怎么跟这个PCA结合到一起的呢?
  SVD是对 ATA 或者 AAT 求解特值和特向,然后对 A 进行分解,得到A=UΔVT,中间是奇异值对角阵。
   U 的列向量是AAT的特向组成。
  因此,可以用SVD求解特向,然后取前几个大的特值对应的特向进行降维。
  PCA想对协方差矩阵特征向量求解,而 AAT 刚好是协方差的表示形式,而 AAT 的特向求解刚好是SVD分解的过程,且分解的酉矩阵的列向量刚好对应着 AAT 的特向,于是PCA的协方差求解特向就变成了样本矩阵的SVD分解。
  两个引理:
  引理1:对于任何一个矩阵 Amn 都有:
   rank(AAT)=rank(ATA)=rank(A)
  引理2:对于任何一个矩阵 A ,都有ATA AAT 是半正定的Hermite矩阵。
  定理1: ATA 的特征值也是 AAT 的特值,反之亦然。
  定理2: A 是正规矩阵 ,则A的奇异值是 A 的非零特征值的模长。
定理3:δ1δ2...δr Amn r 个正奇异值,则存在m阶酉矩阵 U n阶酉矩阵 V ,满足:
A=UDVT=U[Δ000]VT
  其中, Δ=diag(δ1,δ2,...,δr)
  定理3证明过程表明 U AAT的特征向量。此处略去证明,请自行查阅线性代数。
  定理4: δ1δ2...δr A r个正奇异值,则总有次酉矩阵 Umr , Vnr 满足:
   A=UmrΔVTnr
  其中 Δ=diag(δ1,δ2,...,δr)
  特征值和奇异值怎么对应起来?
   ATAβi=λiβi
   σi=λi
   μi=1σiAβi
  这个地方跟上面稍微有所不同,这里条件更宽松了。

LDA方法简介

  LDA核心思想:往线性判别超平面的法向量上投影,使得区分度最大(高内聚,低耦合)。
  具体内容见之前博客-“线性判别函数”的Fisher线性判别准则:http://blog.csdn.net/yujianmin1990/article/details/48007589
  LDA优缺点:
  优点:1)简单易于理解
  缺点:2)计算较为复杂
  PCA in Spark:http://blog.selfup.cn/1243.html

非线性映射

  非线性映射方法的代表方法有:核方法(核+线性),二维化和张量化(二维+线性),流形学习(ISOMap,LLE,LPP)

基于核的非线性降维

  代表方法有:KPCA,KFDA。
  KPCA的基本思想:通过Kernel trick将PCA投影的过程通过内积的形式表达出来。将高维向量 ϕ(x)β 的内积转换成低维的核函数表示。

KPCA

  KPCA
  基于核的非线性降维方法的优缺点:
  优点:具有核方法的优点。
  缺点:核的不同选择影响效果。
  (自己对KPCA这地方并不是完全搞懂了,需要再仔细看看)

二维化和张量化

  将数据映射到二维空间上,常见算法比如二维主分量分析、二维线性判别分析、二维典型相关分析。
  二维化和张量化优缺点:
  优点:
  1)计算效率高。
  2)有些数据二维降维效果要明显好于一维降维。
  缺点:
  1)原理机制研究不透彻。

流形学习

  流形学习的主要算法有:ISOMap(等距映射)、LE(拉普拉斯特征映射)、LLE(局部线性嵌入)。
  流形:直线或者曲线是一维流形,平面或者曲面是二维流形,更高维之后是多维流形。一个流形好比是 d 维的空间,是一个m维空间( m>n )被扭曲之后的空间。流形并不是一个“形状”,而是一个“空间
  流形学习的假设:数据采样于某一流形上。

ISOMap

  ISOMap是一种非迭代的全局优化算法。ISOMap对MDS(Multidimensional Scaling-多维尺度分析)进行改造,用测地线距离(曲线距离)作为空间中两点距离,原来是用欧氏距离,从而将位于某维流形上的数据映射到一个欧氏空间上。
  ISOMap将数据点连接起来构成一个邻接Graph来离散地近似原来流形,而测地距离则相应地通过Graph上的最短路径来近似了。
  比如:我们将球体曲面映射到二维平面上。
  此博客写得通俗易懂:http://blog.pluskid.org/?p=533
  几点注意:
  1)ISOMap适用的流形:适合于内部平坦的低维流形,不适合于学习有较大内在曲率的流形。
  2)近邻数的选择:近邻数应足够大以便能够减少在路径长度和真实测地距离之间的不同,但要小到能够预防“短路”现象。
  3)所构造图的连通性:要求所构造的图示连通的,否则有两种处理办法,一种是放宽临界点选择的限制,另一种是对于每一连通部分分别使用ISOMap算法,得到不同部分的降维结果。
  数据到底是否分布于一个流形上?这是个暂时难以回答的问题。
  MDS是一种降维方法,它在降维时使得降维之后的两点间的欧氏距离尽量保持不变(用欧氏距离矩阵来表示高维向量的两两之间的相似度寻找同样数量的映射维度的向量,使得映射维度下两两间距离约等于原高维下两两间距离,变为了优化问题)。维基百科对MDS的介绍https://en.wikipedia.org/wiki/Multidimensional_scaling

LLE

  前提假设:数据没有形成一个封闭的超曲面,局部数据点是线性的。
  LLE(Locally Linear Embedding-局部线性嵌入)用局部线性反映全局的非线性的算法,并能够使降维的数据保持原有数据的拓扑结构。(在流形上使用局部线性,并用有限局部样本的互相线性表示,得到几何特性的构造权重矩阵,在低维下找到满足高维时样本间构造权重的样本集)
  
  LLE步骤如下:
  1.计算或者寻找数据点 xi 的临近数据点。
    假设数据局部为平面,故可以用线性组合表示 xi ,其误差为:
     e(w)=mi=1||xiKj=1wijxj||2 Kj=1wij=1
    其中 wij 表示线性重构 xi 时的贡献比例。
    找到每个样本点的 K 个最近邻点。
2.计算构造权重并重构数据
通过约束计算wij,使得不在该样本点的 K 个最近邻点中的构造权重都为0.
重构权重使得重构的数据点与临近点间的旋转、缩放、平移特性保持不变,即几何特性不依赖于特定的参考框架。
3.由重构样本向低维映射。(求低维嵌入)
z是低维空间,找到同样数量的低维映射样本,使得:
     e=mi=1||ϕ(xi)Kj=1wijϕ(xij)||2
     e=mi=1||ziKj=1wijzij||2
    最小。(不去关心 ϕ ,直接找 zi
  流形学习优缺点:
  优点:1)假设流形的存在,部分解决了高维数据分布的问题。
  缺点:1)假设流形的存在,不能总是适合数据特点。

其他方法

  其他方法:深度学习,聚类降维
  深度学习降维优缺点:
  优点:1)所提取特征的代表性强
  缺点:1)可解释性差。2)目的性不强
  聚类降维优缺点:
  暂时未看这部分内容

小结

  降维方法 __ 属性选择:过滤法;包装法;嵌入法;
      |_ 映射方法 _线性映射方法:PCA、FDA等
            |_非线性映射方法:
                      |__核方法:KPCA、KFDA等
                      |__二维化:
                      |__流形学习:ISOMap、LLE、LPP等。
            |__其他方法:神经网络和聚类
            
  降维可以方便数据可视化+数据分析+数据压缩+数据提取等。
  各个降维方法效果图展示:
  

这里写图片描述

  


http://chatgpt.dhexx.cn/article/pC8WpwJR.shtml

相关文章

12种降维方法终极指南

来源:Analytics Vidhya 编译:Bot 授权自 论智 你遇到过特征超过1000个的数据集吗?超过5万个的呢?我遇到过。降维是一个非常具有挑战性的任务,尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠——数据…

12种降维方法终极指南(含Python代码)

12种降维方法终极指南(含Python代码) 你遇到过特征超过1000个的数据集吗?超过5万个的呢?我遇到过。降维是一个非常具有挑战性的任务,尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠——数据量越大&…

七种降维方法

近来由于数据记录和属性规模的急剧增长,大数据处理平台和并行数据分析算法也随之出现。于此同时,这也推动了数据降维处理的应用。实际上,数据量有时过犹不及。有时在数据分析应用中大量的数据反而会产生更坏的性能。 最新的一个例子是采用 20…

【数据降维】数据降维方法分类

数据降维基本原理是将样本点从输入空间通过线性或非线性变换映射到一个低维空间,从而获得一个关于原数据集紧致的低维表示。 数据降维工具箱drtoolbox中众多算法,这里简单做个分类。 因为很多并没有仔细了解,在此次只对八种方法做分类&…

机器学习之降维方法总结

降维方法分为线性降维方法和非线性降维方法,看下表:本文结构如下: 线性降维方法主成分分析法线性判别法奇异值分解法因子分析法非线性降维方法~~流形学习简介 说到维度,其目的是用来进行特征选择和特征提取…

常见的降维方法(PCA,SVD)

1、PCA降维(主成分分析) PCA降维就是去除线性相关,使得最后剩余的属性维度全都线性无关。 其实:PCA降维不仅是去除先线性无关,还可以过滤掉小特征值对应的特征向量。因为特征值变化小,对应的特征向量变化…

看!数据分析领域中最为人称道的七种降维方法

http://dataunion.org/20803.html 感谢王穆荣的投稿,转载请注明出处:数盟社区 近来由于数据记录和属性规模的急剧增长,大数据处理平台和并行数据分析算法也随之出现。于此同时,这也推动了数据降维处理的应用。实际上&#xff0…

数据降维的几种常见方法(PCA;FA;LDA;ICA等)

文章目录 数据降维方式简述PCA与ICA、FA、LDA的区别与联系1.PCA与ICA的联系与区别2.PCA与LDA的联系与区别3.PCA与FA的联系与区别 总结 数据降维方式简述 在学习ICA算法的过程中,了解到常常需要对数据进行降维,如PCA,FA等,以达到数…

大整数的乘法

大整数的乘法 (这里主要讨论的是两个较大的数相乘的效率问题,实际上并不是真正意义上的大数相乘。在java中有个BigInteger类已经可以储存大数,并提供了大数相乘的方法了。) 【分析】 首先,当两个整数X、Y&#xff0…

实验一:大整数乘法

1.实验目的 掌握分治算法的基本思想、技巧和效率分析方法。熟练掌握用递归设计分治算法的基本步骤。学会利用分治算法解决实际问题。 2.实验内容 大整数乘法 采用分治算法实现两个n位二进制(或者十进制)大整数的乘法。 3.实验要求 根据实验内容构思…

分治法的经典问题——大整数相乘

分治法的原理 讨论问题时,先来了解一下什么是分治法。 分治法的意思就是,分而治之,也就是把一个问题,拆分成几个小问题,最后再汇总解决的方法 通过大整数相乘问题来了解分治法 假如现在我们要求两个大整数相乘的乘积…

大整数乘法(分治法)

大整数乘法(分治法) 题目描述:设X和Y都是n位的十进制整数,计算它们的乘积X*Y。 如果按照我们日常的计算方法,应该就是将两个数逐位相乘,最后加起来得到最终的结果,时间复杂度为O(n2&…

大整数相乘算法

一 转换为二进制求,推导出的公式适合十进制计算 设X和Y都是n位的二进制整数,现在要计算它们的乘积XY。我们可以用小学所学的方法来设计一个计算乘积XY的算法,但是这样做计算步骤太多,显得效率较低。如果将每2个1位数的乘法或加法看…

【大整数乘法】

问题 2.伪代码 理想情况下&#xff0c;XY位数相同 Mul(long long x,long long y,int num){Fh<--(x*y>0)?1:-1;x<--|x|; y<--|y|;if(num 0)then return 0;else if(num1) then return fh*x*y;else{x_high<--x/10^(num/2);x_low<--x mod 10^(num/2);y_high…

大整数乘法(大整数乘int型)

算法思想&#xff1a; 1.将大整数倒序储存到数组中&#xff08;方便进位&#xff09; 2.对同位相乘后的数取模10&#xff0c;推入结果数组中 3.对同位相乘后的数除以10&#xff0c;作为进位 5.去除可能出现的前导零 4.完成乘法后倒序输出 补充知识&#xff1a; 1、vector相关用…

C语言实现大整数乘法

转载自&#xff1a;点击打开链接 乘法规律&#xff0c;一个数的第i位和另一个数的第j位相乘&#xff0c;一定会累加到结果的第ij位&#xff0c;结果的数组一个数组元素存2位数&#xff0c;最后对结果处理进位&#xff0c;最后打印出来 方法一见上面链接https://www.cnblogs.c…

大整数乘法(简单模拟乘法过程)

一、分析 整数的数值超过计算机硬件所能表示的最大值时&#xff0c;那么我们只能借助软件的方法来实现大整数的乘法了。 我们可以使用字符串来模拟大整数的乘法&#xff0c;算法的思想就是使用我们在小学时学过的乘法&#xff0c;一位位相乘&#xff0c;最后计算出结果。如下&…

算法总结——大整数乘法

问题描述 求两个不超过200位的非负整数的积。 输入数据 有两行&#xff0c;每行是一个不超过200位的非负整数&#xff0c;没有多余的前导0。 输出要求 一行&#xff0c;即相乘后的结果。结果里不能有多余的前导0&#xff0c;即如果结果是342&#xff0c;那么就不能输出为0342。…

大整数的乘法(分治法)

通常执行一次加法或乘法运算所需的计算时间看作一个仅取决于计算机硬件处理速度的常数。这个仅在参加运算的整数能在计算机硬件对整数的表示范围内直接处理才是合理的。若要精确地表示大整数并在计算结果中要求精确得到所有位数上的数字&#xff0c;就必须用软件的方法来实现大…

分治法-大整数乘法

问题分析&#xff1a; 在计算机上处理一些大数据相乘时&#xff0c;由于计算机硬件的限制&#xff0c;不能直接进行相乘得到想要的结果。可以将一个大的整数乘法分而治之&#xff0c;将大问题变成小问题&#xff0c;变成简单的小数乘法再进行合并&#xff0c;从而解决上述问题…