matlab 降维工具 转载【https://blog.csdn.net/tarim/article/details/51253536】

降维工具箱drtool

这个工具箱的主页如下,现在的最新版本是2013.3.21更新,版本v0.8.1b

http://homepage.tudelft.nl/19j49/Matlab_Toolbox_for_Dimensionality_Reduction.html

这里有两个这个工具箱的简单介绍:

【Matlab】数据降维工具箱drtoolbox

http://blog.csdn.net/xiaowei_cqu/article/details/7515077

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

http://blog.csdn.net/xiaowei_cqu/article/details/7522368

下面稍详细介绍一些这个工具箱。下载压缩包,解压后里面有一个Readme.txt文档,里面写有工具箱的相关介绍,这里做简单翻译吧。

安装

把解压后的文件夹放到$MATLAB_DIR/toolbox下,当然也可以放到任意自己想放的路径,然后打开matlab设置路径Set Path,选择‘Add with subfolders...‘,选中drtoolbox,保存即可。

设置完成后,需要对函数做编译,虽然一些压缩包自带一些编译好的mex文件,但可能并不适合你的平台,所以最好在自己电脑上完成编译,方法是让matlab进入drtoolbox文件,然后运行mexall命令。

特性

当前版本的工具箱包括34种数据降维技术,如下,这些可以通过compute_mapping函数或GUI调用:

- Principal Component Analysis (‘PCA‘) ---主成分分析

- Linear Discriminant Analysis (‘LDA‘) ---线性判别分析

- Multidimensional scaling (‘MDS‘) ---多维尺度分析

- Probabilistic PCA (‘ProbPCA‘)

- Factor analysis (‘FactorAnalysis‘) ---因子分析

- Sammon mapping (‘Sammon‘)

- Isomap (‘Isomap‘) ---等距映射

- Landmark Isomap (‘LandmarkIsomap‘)

- Locally Linear Embedding (‘LLE‘) ---局部线性嵌入

- Laplacian Eigenmaps (‘Laplacian‘) ---Laplacian特征映射

- Hessian LLE (‘HessianLLE‘)

- Local Tangent Space Alignment (‘LTSA‘) ---局部切空间排列

- Diffusion maps (‘DiffusionMaps‘)

- Kernel PCA (‘KernelPCA‘) ---核主成分分析

- Generalized Discriminant Analysis (‘KernelLDA‘)

- Stochastic Neighbor Embedding (‘SNE‘)

- Symmetric Stochastic Neighbor Embedding (‘SymSNE‘)

- t-Distributed Stochastic Neighbor Embedding (‘tSNE‘)

- Neighborhood Preserving Embedding (‘NPE‘)

- Locality Preserving Projection (‘LPP‘) ---局部保留投影

- Stochastic Proximity Embedding (‘SPE‘)

- Linear Local Tangent Space Alignment (‘LLTSA‘)

- Conformal Eigenmaps (‘CCA‘, implemented as an extension of LLE)

- Maximum Variance Unfolding (‘MVU‘, implemented as an extension of LLE) ---最大方差展开

- Landmark Maximum Variance Unfolding (‘LandmarkMVU‘)

- Fast Maximum Variance Unfolding (‘FastMVU‘)

- Locally Linear Coordination (‘LLC‘)

- Manifold charting (‘ManifoldChart‘)

- Coordinated Factor Analysis (‘CFA‘)

- Gaussian Process Latent Variable Model (‘GPLVM‘)

- Deep autoencoders (‘Autoencoder‘)

- Neighborhood Components Analysis (‘NCA‘)

- Maximally Collapsing Metric Learning (‘MCML‘)

- Large Margin Nearest Neighhbor metric learning (‘LMNN‘)

这些算法在【Dimensionality Reduction】数据降维方法分类http://blog.csdn.net/xiaowei_cqu/article/details/7522368中有个小结,这里引用如下:

线性/非线性

线性降维是指通过降维所得到的低维数据能保持高维数据点之间的线性关系。线性降维方法主要包括PCA、LDA、LPP(LPP其实是Laplacian Eigenmaps的线性表示);非线性降维一类是基于核的,如KPCA,此处暂不讨论,另一类就是通常所说的流形学习:从高维采样数据中恢复出低维流形结构(假设数据是均匀采样于一个高维欧式空间中的低维流形),即找到高维空间中的低维流形,并求出相应的嵌入映射。非线性流形学习方法有:Isomap、LLE、Laplacian Eigenmaps、LTSA、MVU。

整体来说,线性方法计算块,复杂度低,但对复杂的数据降维效果较差。

监督/非监督

监督式和非监督式学习的主要区别在于数据样本是否存在类别信息。非监督降维方法的目标是在降维时使得信息的损失最小,如PCA、LPP、Isomap、LLE、Laplacian Eigenmaps、LTSA、MVU;监督式降维方法的目标是最大化类别间的辨别信,如LDA。事实上,对于非监督式降维算法,都有相应的监督式或半监督式方法的研究。

全局/局部

局部方法仅考虑样品集合的局部信息,即数据点与临近点之间的关系。局部方法以LLE为代表,还包括Laplacian Eigenmaps、LPP、LTSA。

全局方法不仅考虑样本几何的局部信息,和考虑样本集合的全局信息,及样本点与非临近点之间的关系。全局算法有PCA、LDA、Isomap、MVU。

由于局部方法并不考虑数据流形上相距较远的样本之间的关系,因此,局部方法无法达到“使在数据流形上相距较远的样本的特征也相距较远”的目的。

以下是对一组三维数据(900样本)降到一维,应用八种算法的时间对比:

另外,工具箱还提供6种技术做本质维度估计intrinsic dimensionality estimation如下,就是估计降到多少维较好。这些技术可以利用intrinsic_dim函数调用。

- Eigenvalue-based estimation (‘EigValue‘)

- Maximum Likelihood Estimator (‘MLE‘)

- Estimator based on correlation dimension (‘CorrDim‘)

- Estimator based on nearest neighbor evaluation (‘NearNb‘)

- Estimator based on packing numbers (‘PackingNumbers‘)

- Estimator based on geodesic minimum spanning tree (‘GMST‘)

此外,工具箱还包括数据白化函数prewhiten、样本外点外延的计算和估计out_of_sample(或out_of_sample_est)和产生测试数据集函数generate_data。这些方法和函数都可以通过GUI方便的调用,drgui可以调出此GUI,如下,样子比较粗糙,使用还算方便,工具箱具有的功能一目了然

用法

这个工具箱提供给用户使用的接口函数都在与这个Readme文件同路径的目录,主要包括如下文件:(基本上面都提到过)

compute_mapping.m     This function performs the specified dimension reduction technique on the specified data set. Type HELP COMPUTE_MAPPING to get details on supported techniques and on the parameters of the techniques. 在指定的数据集上执行指定的降维技术。help compute_mapping可以查看函数用法和参数选项。
drgui.m  This function allows you to use some of the toolbox functionality via a graphical user interface. 打开GUI,方便调用工具箱函数。
generate_data.m     This function generates some artificial data sets such as the Swiss roll data set. 产生一些人工数据集,如Swiss环数据。
intrinsic_dim.m   This function performs intrinsic dimensionality estimation using the specified estimator on the specified data set. 使用指定的估计器对指定的数据做本质维数估计。
mexall.m      This function compiles all the MEX-files that are required to use the toolbox. Please run immediately after installation. 编译这个工具箱需要的所有mex文件。安装后请先运行此函数。
out_of_sample.m      This function takes as input a dimension reduction mapping and a set of new test points, and outputs the locations of the test points in the reduced space. This function is only supported by parametric and spectral techniques. 以降维后的映射和新测试点为输入,输出这些新测试点在降维空间中的位置,这个函数只支持参数化和谱分析技术的样本外点外延。
out_of_sample_est.m    This function takes as input a training set, a reduced version of that training set, and a set of new test points, and finds an approximate locations of the test points in the reduced space. Only use this function for techniques that do not support out-of-sample-extensions. 以训练集、维度降低后的训练集和一些新测试点为输入来找到这些新测试点在低维空间的大概位置。这个函数只适用于那些不支持样本外点外延的技术。
prewhiten.m   This function whitens data, i.e., it makes it zero-mean, identity-covariance 数据白化,即去均值、协方差单位化。
reconstruct_data.m    This function computes reconstructions of reduced data for linear techniques and autoencoders. 对线性技术和自编码技术做降维数据重构。
test_toolbox.m  This function runs a full test of all functionalities of the toolbox. 快速对工具箱的所有函数做全测试。

下面也是使用工具箱的例子,我做了整理和注释

clc

clear

close all

% 产生测试数据

[X, labels] = generate_data(‘helix‘, 2000);

figure

scatter3(X(:,1), X(:,2), X(:,3), 5, labels)

title(‘Original dataset‘)

drawnow

% 估计本质维数

no_dims = round(intrinsic_dim(X, ‘MLE‘));

disp([‘MLE estimate of intrinsic dimensionality: ‘ num2str(no_dims)]);

% PCA降维

[mappedX, mapping] = compute_mapping(X, ‘PCA‘, no_dims);

figure

scatter(mappedX(:,1), mappedX(:,2), 5, labels)

title(‘Result of PCA‘)

% Laplacian降维

[mappedX, mapping] = compute_mapping(X, ‘Laplacian‘, no_dims, 7);

figure

scatter(mappedX(:,1), mappedX(:,2), 5, labels(mapping.conn_comp))

title(‘Result of Laplacian Eigenmaps‘)

drawnow

% Isomap降维

[mappedX, mapping] = compute_mapping(X, ‘Isomap‘, no_dims);

figure

scatter(mappedX(:,1), mappedX(:,2), 5, labels(mapping.conn_comp))

title(‘Result of Isomap‘)

drawnow

运行结果如下

此工具箱所有函数都可以用在著名模式识别PRTools工具箱的数据集上(http://prtools.org)。有关降维的更多选项可以看compute_mapping的帮助,help compute_mapping;有关本质维数估计的更多信息可以看intrinsic_dim的帮助,help intrinsic_dim。

使用中的问题

如果你在运行此工具箱的函数时,得到某些文件不存在的错误,这可能是因为一些mex函数被使用了。虽然工具箱提供了一些mex函数的编译版本,但可能并不适合你的平台,所以这个问题可以通过运行mexall函数编译全部mex函数来解决。这个命令也可以解决Isomap算法最短路径计算慢的问题。

如果在运行FastMVU算法时遇到有关CSDP的错误,这是由于你平台上的二进制CSDP丢失的缘故。可以在网站https://projects.coin-or.org/Csdp/上得到二进制CSDP的发布版本,将其放在drtoolbox/techniques文件夹下即可。注意确保不同平台正确的文件名(csdp.exe for Windows, csdpmac for Mac OS X (PowerPC), csdpmaci for Mac OS X (Intel), and csdplinux for Linux)。

很多降维方法都要执行稀疏矩阵的谱分析。当然特征值分析eigenanalysis是一个常用的方法,但大矩阵的特征值分解可能会很耗时,所以工具箱提供了两种特征值分析方法:

- The original Matlab functions (based on Arnoldi methods)

- The JDQR functions (based on Jacobi-Davidson methods)

对于10000点以内的问题,建议使用Matlab setting,超过10000点,则JDQR值得一试。

其他一些常见问题FAQ可以在http://homepage.tudelft.nl/19j49/Matlab_Toolbox_for_Dimensionality_Reduction.html中找到,这里简单说一下,详查上面网站

1. When using the toolbox, the code quits saying that some function could not be found?

运行出错、函数找不到的问题,上面已提到,一个原因也没添加路径,还有可能是与其他工具箱的函数冲突,如PCA函数,可以使用which命令找相关原因。如果报错说找不到bsxfun函数,这是因为你的matlab版本过低,没有提供这个函数,可以用这个代码代替http://www.mathworks.com/matlabcentral/fileexchange/18685

2. Next to reducing the dimensionality of my data, Isomap/LLE/Laplacian Eigenmaps/LTSA also reduced the number of data points? Where did these points go?

Isomap/LLE/Laplacian Eigenmaps/LTSA算法使用后,数据点数减少的问题。这个是基于邻域图的算法的普遍行为,这些算法把数据嵌入到相关连邻域图中,如果邻域图不相关连,则只嵌入最大关连成分,从而带来数据点数的减少。你可以通过mapping.conn_comp得到嵌入数据点的次序,mapping由调用compute_mapping函数得到。如果你不想丢失数据点,就不要用流形学习算法。

3. How do I provide label information to the supervised techniques/metric learners?

如何在监督学习中提供标签信息。在监督学习算法中(LDA, NCA, MCML, and LMNN),可以设置数据矩阵的第一列元素为相应标签,这些标签一定要是数值型的。如果要嵌入测试数据,则在out_of_sample函数中使用无标签的数据。

4. How do I project low-dimensional data back into the data space?

如何将低维数据映射回原空间。能反向映射的算法只有使用了线性技术、自编码和GPLVM的算法,但这个功能工具箱现在还不提供。

5. Which techniques support an exact out-of-sample extension?

哪些方法支持准确的样本外点外延。只有参数化降维技术,即学习得到一个原数据空间和低维潜在空间的确切函数的算法,支持准确的样本外点外延。所有的线性技术(PCA, LDA, NCA, MCML, LPP, and NPE)和自编码技术支持准确外延。谱分析技术如Isomap, LLE, and Laplacian Eigenmaps,支持基于Nystr?m approximation的样本外点外延估计。外延使用工具箱函数out_of_sample实现。

6. Which technique should I use to visualize high-dimensional data in a scatter plot?

哪些技术适合在散点图上展示高维数据。t-SNE是最适合的算法;流形学习常常并不适于数据展示,因为它有协方差约束的问题;参数化技术通常也不适合展示,因为他们在数据和展示之间存在约束。

相关参考文献

- L.J.P. van der Maaten, E.O. Postma, and H.J. van den Herik. Dimensionality Reduction: A Comparative Review. Tilburg University Technical Report, TiCC-TR 2009-005, 2009.

- L.J.P. van der Maaten and G.E. Hinton. Visualizing High-Dimensional Data Using t-SNE. Journal of Machine Learning Research 9(Nov):2579-2605, 2008.

原文地址:https://www.cnblogs.com/xiaolong19910914/p/8686725.html

时间: 2024-10-14 00:45:32

matlab 降维工具 转载【https://blog.csdn.net/tarim/article/details/51253536】的相关文章

Consul+upsync+Nginx实现动态负载均衡 摘自https://blog.csdn.net/qq_29247945/article/details/80787014

传统感念:每次修改完nginx配置文件,要重启nginx 动态感念:每次修改完nginx配置信息,不需要重启,nginx实时读取配置信息. Nginx: 反向代理和负载均衡 Consul:是用go编写(谷歌),实现对动态负载均衡注册与发现功能 SpringCloud支持  Zookeeper.Eureka.Consul服务注册与发现. 服务注册:服务实现者可以通过HTTP API或DNS方式,将服务注册到Consul. 服务发现:服务消费者可以通过HTTP API或DNS方式,从Consul获取

操作系统---栈区与堆区 转自:https://blog.csdn.net/amcp9/article/details/79597481

当一个程序运行时,其RAM存储方式是按照一定的区域划分的,以C为例 内存中的栈区处于相对较高的地址向较低的地址拓展,由操作系统决定的最高地址,所以它是一块连续的内存空间. 栈中分配局部变量空间,堆区是低地址向高地址拓展,用于分配程序员申请的内存空间.另外还有静态区是分配静态变量,全局变量空间的:只读区是分配常量和程序代码空间的:以及其他一些分区. 栈: 栈是为执行线程留出的内存空间.当函数被调用的时候,栈顶为局部变量和一些 bookkeeping 数据预留块.当函数执行完毕,块就没有用了,可能在

https://blog.csdn.net/doegoo/article/details/50749817

因为使用DiscuzX3.2进行系统的整合后,因为只是想在原J2EE的系统上增加论坛功能,而且J2EE中已经有一套用户的注册认证的体系,所以不需要在Discuz的系统中去注册以及登录功能,而是通过在J2EE进行注册和登录使用单点登录的方式来完成论坛的注册与登录,这样使两个系统形成了一个整体.具体关于通过J2EE登录就完成论坛登录的单点登录过程请参见<J2EE与DiscuzX3.2的UCenter实现单点登录>,这里只是描述当完成以上功能过后,如何禁止,用户直接在Discuz论坛注册以及登录.

每次换电脑 或者重装系统的时候有点麻烦转自别人的https://blog.csdn.net/u014722022/article/details/100170664

记录一下自己安装过程遇到的问题,也希望对大家有用~ 1.下载(官方推荐的是下载安装版本,但是解压版更便捷),下载地址: 2.解压,我们需要增加一步操作: (1)创建一个名为my.ini的文件,补充:之前建了data文件夹,但是后续安装报错,引以为戒: 3.修改my.ini文件: [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir =

https://blog.csdn.net/u011489043/article/details/68488459

转自https://blog.csdn.net/u011489043/article/details/68488459 String 字符串常量 ??StringBuffer 字符串变量(线程安全) ??StringBuilder 字符串变量(非线程安全) ??简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因为String类的声明是:public final,因此在每次对 String 类型进行改变的时候其实都等同于生成了

如何相互转换逗号分隔的字符串和List --https://blog.csdn.net/yywusuoweile/article/details/50315377

如何相互转换逗号分隔的字符串和List ---https://blog.csdn.net/yywusuoweile/article/details/50315377 方法 2: 利用Guava的Joiner [java] view plain copy List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"

py3 web.py转https://blog.csdn.net/weixin_42024288/article/details/80364441

https://blog.csdn.net/weixin_42024288/article/details/80364441 1.安装webpy模块: pip install web.py==0.40.dev 另外将: C:\Python34\Lib\site-packages\web.py-0.40.dev0-py3.4.egg\web\template.py 中约1022行return Template(open(path).read(), filename=path, **self._ke

转-java编译时error: illegal character &#39;\ufeff&#39; 的解决办法-https://blog.csdn.net/t518vs20s/article/details/80833061

原文链接:https://blog.csdn.net/shixing_11/article/details/6976900 最近开发人员通过SVN提交了xxx.java文件,因发布时该包有问题需要回退,故SCM将该xxx.java文件用editplus打开删除了新添的一行,删除后重新编译打包,却报了如下异常: java:[1,0] illegal character: \65279 表面看着该文件确实没错,看不出来问题,后来从SVN上更新下代码以后,发现本地也不报错,后来通过Eclipse查看了

https://blog.csdn.net/the_liang/article/details/82708907

转自:https://blog.csdn.net/the_liang/article/details/82708907 Xmanager Power Suit 6.0.0109 最新版注册激活,长期更新以下方法基本上可以对最近版本适用,也就是说不需要我更新文章,你也可以通过以下方法尝试激活最新的版本!操作步骤 Xmanger Power Suit 官方 其实有两种 .exe 文件,一个是用于试用的,在注册的时候不能直接输入密钥.而另一个是为注册用户提供的 .exe 文件,在注册的时候可以输入密钥