数据降维方法小结

原文:http://blog.csdn.net/yujianmin1990/article/details/48223001

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

数据降维的目的

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

数据降维的方法

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

线性映射

  线性映射方法的代表方法有: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的协方差矩阵(AT∗A=U,因为去中心化后的AT∗A即协方差) 
  E(X−X0)(Y−Y0)=∑mi=11m(xi−x0)(yi−y0)。 
  期望的定义:E(x)=∑xi∗p(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分解用来找到矩阵的主要部分。可以直接对数据矩阵进行分解。 
  Bm∗n≈Um∗k∑k∗k∗VTn∗k 
  其中Um∗k和Vn∗k是正交矩阵。 
  Bm∗n∗Vn∗k≈Um∗k∑k∗k∗VTn∗k∗Vn∗k 
  Bm∗n∗Vn∗k≈Um∗k∑k∗k≈A^m∗k实现了降维。 
  UTm∗k∗Bm∗n≈UTm∗k∗Um∗k∑k∗k∗VTn∗k≈∑k∗k∗VTn∗k≈A^k∗n实现了压缩数据。 
  SVD怎么跟这个PCA结合到一起的呢? 
  SVD是对ATA或者AAT求解特值和特向,然后对A进行分解,得到A=UΔVT,中间是奇异值对角阵。 
  U的列向量是AAT的特向组成。 
  因此,可以用SVD求解特向,然后取前几个大的特值对应的特向进行降维。 
  PCA想对协方差矩阵特征向量求解,而AAT刚好是协方差的表示形式,而AAT的特向求解刚好是SVD分解的过程,且分解的酉矩阵的列向量刚好对应着AAT的特向,于是PCA的协方差求解特向就变成了样本矩阵的SVD分解。 
  两个引理: 
  引理1:对于任何一个矩阵Am∗n都有: 
  rank(AAT)=rank(ATA)=rank(A) 
  引理2:对于任何一个矩阵A,都有ATA与AAT是半正定的Hermite矩阵。 
  定理1:ATA的特征值也是AAT的特值,反之亦然。 
  定理2:若A是正规矩阵 ,则A的奇异值是A的非零特征值的模长。 
  定理3:若δ1?δ2?...?δr是Am∗n的r个正奇异值,则存在m阶酉矩阵U和n阶酉矩阵V,满足: 
  A=UDVT=U[Δ000]VT 
  其中, Δ=diag(δ1,δ2,...,δr) 
  定理3证明过程表明U是AAT的特征向量。此处略去证明,请自行查阅线性代数。 
  定理4:若δ1?δ2?...?δr是A的r个正奇异值,则总有次酉矩阵Um∗r,Vn∗r满足: 
  A=Um∗rΔVTn∗r 
  其中 Δ=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这地方并不是完全搞懂了,需要再仔细看看)

二维化和张量化

  将数据映射到二维空间上,常见算法比如二维主分量分析、二维线性判别分析、二维典型相关分析。 
  二维化和张量化优缺点: 
  优点: 
  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||xi−∑Kj=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||zi−∑Kj=1wijzij||2 
    最小。(不去关心?,直接找zi) 
  流形学习优缺点: 
  优点:1)假设流形的存在,部分解决了高维数据分布的问题。 
  缺点:1)假设流形的存在,不能总是适合数据特点。

其他方法

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

小结

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

时间: 2024-10-01 06:58:58

数据降维方法小结的相关文章

【深度学习】数据降维方法总结

引言: 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式. y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的).f可能是显式的或隐式的.线性的或非线性的. 目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据.之所以使用降维后的数据表示是因为:①在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应

asp网络编程:Web程序中网页间数据传递方法小结

我们总是会遇到这样的情况,需要将数值从一个网页传递到另一个网页.在这篇文章中,向你展示了几种从一个网页向另一个网页传递数值的几种方法.在此例子中,创建的网页由一个文本控件和几个按钮控件组成.在文本框中输入的数据通过被标识在按钮控件中的不同方法从一个网页传递到另一个网页. Response.Redirect 让我们首先看一看如何使用Response.Redirect方法传递数据.这是它们之中最简单的方法.在文本框中输入一些数据,并且当你输入完成数据后,按下“Respose.Redirect”按钮.

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

这七种数据分析领域中最为人称道的降维方法 感谢王穆荣的投稿,转自数盟社区 近来由于数据记录和属性规模的急剧增长,大数据处理平台和并行数据分析算法也随之出现.于此同时,这也推动了数据降维处理的应用.实际上,数据量有时过犹不及.有时在数据分析应用中大量的数据反而会产生更坏的性能. 最新的一个例子是采用 2009 KDD Challenge 大数据集来预测客户流失量. 该数据集维度达到 15000 维. 大多数数据挖掘算法都直接对数据逐列处理,在数据数目一大时,导致算法越来越慢.该项目的最重要的就是在

EF 通用数据层父类方法小结

MSSql 数据库 数据层 父类 增删改查: using System;using System.Collections.Generic;using System.Data;using System.Data.Entity;using System.Data.Entity.Infrastructure;using System.Linq;using System.Linq.Expressions;using System.Reflection;using System.Text; namespa

matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。

最近跑深度学习,提出的feature是4096维的,放到我们的程序里,跑得很慢,很慢.... 于是,一怒之下,就给他降维处理了,但是matlab 自带的什么pca( ), princomp( )函数,搞不清楚怎么用的,表示不大明白,下了一个软件包: 名字:Matlab Toolbox for Dimensionality Reduction 链接:http://lvdmaaten.github.io/drtoolbox/ Currently, the Matlab Toolbox for Dim

Stanford机器学习---第十讲. 数据降维

本文原始地址见http://blog.csdn.net/abcjennifer/article/details/8002329,在此添加了一些自己的注释方便理解 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.内容大多来自

Coursera《machine learning》--(14)数据降维

本笔记为Coursera在线课程<Machine Learning>中的数据降维章节的笔记. 十四.降维 (Dimensionality Reduction) 14.1 动机一:数据压缩 本小节主要介绍第二种无监督学习方法:dimensionality reduction,从而实现数据的压缩,这样不仅可以减少数据所占磁盘空间,还可以提高程序的运行速度.如下图所示的例子,假设有一个具有很多维特征的数据集(虽然下图只画出2个特征),可以看到x1以cm为单位,x2以inches为单位,它们都是测量长

机器学习笔记----四大降维方法之PCA(内带python及matlab实现)

大家看了之后,可以点一波关注或者推荐一下,以后我也会尽心尽力地写出好的文章和大家分享. 本文先导:在我们平时看NBA的时候,可能我们只关心球员是否能把球打进,而不太关心这个球的颜色,品牌,只要有3D效果,看到球员扣篮的动作就可以了,比如下图: 如果我们直接对篮球照片进行几百万像素的处理,会有几千维甚至几万维的数据要计算,计算量很大.而往往我们只需要大概勾勒出篮球的大概形状就可以描述问题,所以必须对此类数据降维,这样会使处理数据更加轻松.这个在人脸识别中必须要降维,因为我们在做特征提取的时候几万维

数据降维--低秩恢复

数据降维--低秩恢复 在实际的信号或图像采集与处理中,数据的维度越高, 给数据的采集和处理带来越大的限制.例如,在采集三维或四维(三个空间维度再加上一个频谱维度或一个时间维度) 信号时,往往比较困难.然而,随着数据维数的升高,这些高维数据之间往往存在较多的相关性和冗余度.信号的维度越高,由于数据本身信息量的增长比数据维度增长慢得多,也就使得数据变得越冗余.一个明显的例子就是,视频信号要比单幅图像的可压缩的空间大得多. 例如,对于一幅图像而言,其像素间的相关性表现在图像在某个变换域的系数是稀疏分布