降维工具箱drtool

  这个工具箱的主页如下,现在的最新版本是2013.3.21更新,版本v0.8.1b
    这里有两个这个工具箱的简单介绍:
【Matlab】数据降维工具箱drtoolbox
【Dimensionality Reduction】数据降维方法分类
 
    下面稍详细介绍一些这个工具箱。下载压缩包,解压后里面有一个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.

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

  1. Mui本地打包笔记(一)使用AndroidStudio运行项目 转载 https://blog.csdn.net/baidu_32377671/article/details/79632411

    转载 https://blog.csdn.net/baidu_32377671/article/details/79632411 使用AndroidStudio运行HBuilder本地打包的Mui项目 ...

  2. 爬虫出现Forbidden by robots.txt(转载 https://blog.csdn.net/zzk1995/article/details/51628205)

    先说结论,关闭scrapy自带的ROBOTSTXT_OBEY功能,在setting找到这个变量,设置为False即可解决. 使用scrapy爬取淘宝页面的时候,在提交http请求时出现debug信息F ...

  3. MVC和WebApi 使用get和post 传递参数。 转载https://blog.csdn.net/qq373591361/article/details/51508806

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq373591361/article/details/51508806我们总结一下用js请求服务器的 ...

  4. AutoFac控制反转 转载https://blog.csdn.net/u011301348/article/details/82256791

    一.AutoFac介绍 Autofac是.NET里IOC(Inversion of Control,控制反转)容器的一种,同类的框架还有Spring.NET,Unity,Castle等.可以通过NuG ...

  5. 已知IP地址和子网掩码求出网络地址、广播地址、地址范围和主机数(转载https://blog.csdn.net/qq_39026548/article/details/78959089)

    假设IP地址为128.11.67.31,子网掩码是255.255.240.0.请算出网络地址.广播地址.地址范围.主机数.方法:将IP地址和子网掩码转化成二进制形式,然后进行后续操作. IP地址和子网 ...

  6. Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))转载https://blog.csdn.net/wei18791957243/article/details/86259688

      在Scrapy框架中的items.py的作用   1.可以预先定义好要爬取的字段     items.py import scrapy     class TencentItem(scrapy.I ...

  7. Spring配置xml自动提示——转载https://blog.csdn.net/sinat_18474835/article/details/79370629

    以Spring2.0为例: 下载地址: Csdn: http://download.csdn.net/download/hh775313602/9812757 没积分的可以去百度网盘下载,我已共享: ...

  8. jeecms 强大的采集功能优化 转载 https://blog.csdn.net/jeff06143132/article/details/7099003

    ========================================================= 没办法附件上传不了,AcquisitionSvcImpl.java类: //---- ...

  9. Mac OS X下把 /etc/sudoers 写错了怎么办?(转载https://blog.csdn.net/robertsong2004/article/details/53725285)

    重要的事情先说一下,首先为了回避这个问题,一定要用 visudo 来改 /etc/sudoers 文件. 问题描述: 1. 用  sudo vi 直接改 /etc/sudoers 并覆盖原文件. 2. ...

随机推荐

  1. Linux wget 批量下载

    需求:已知50个pdf的URL地址,需要批量下载,该怎么办呢? 方案一:使用wget自带的一个功能 -i 选项  从指定文件中读取下载地址,这样的好处是一直是这一个wget进程下载所有pdf,不会来回 ...

  2. [考试反思]0917csp-s模拟测试45:天命

    又倒一了. 关于心态,有不少想说的. 首先旁边坐了一个kx.他上来入手T1没多久就切了然后开始对拍拍了几十万组AC. 然而我觉得T1是神仙题.先进T2. 挺简单的,5分钟出正解,然后在打出来的时候突然 ...

  3. CSPS模拟 89

  4. JSP——底层原理

    都知道jsp就是在HTML文件中写java代码,以实现动态页面的效果,但是这种动态是如何实现的呢?今天就在研究一下. 首先,我写了一个简单的jsp文件: <%@page import=" ...

  5. 由浅入深——从ArrayList浅谈并发容器

    原创作品转载请附:https://www.cnblogs.com/superlsj/p/11655523.html 一.一个案例引发的思考 public class ArrayListTest { p ...

  6. 0911作业-if while循环小练习

    输入姑娘的年龄后,进行以下判断: 如果姑娘小于18岁,打印"不接受未成年" 如果姑娘大于18岁小于25岁,打印"心动表白" 如果姑娘大于25岁小于45岁,打印& ...

  7. css 完美垂直居中解决方案兼容ie8以上等其他浏览器

    css 完美垂直居中解决方案兼容ie8以上等其他浏览器 <pre><!DOCTYPE html><html><head> <title>DI ...

  8. macOS 使用Miniconda配置本地数据运算环境

    目前,做数据分析工作,基本人手Numpy,pandas,scikit-learn.而这些计算程序包都是基于python平台的,所以搞数据的都得先装个python环境...(当然,你用R或Julia请忽 ...

  9. SSE图像算法优化系列三十:GIMP中的Noise Reduction算法原理及快速实现。

    GIMP源代码链接:https://gitlab.gnome.org/GNOME/gimp/-/archive/master/gimp-master.zip GEGL相关代码链接:https://gi ...

  10. [Office] Resources for Office Development

    Office 2013 Document (.chm) download page: http://www.microsoft.com/en-us/download/details.aspx?id=4 ...