t-SNE降维算法

最后更新于:2024-04-07 21:40:35

一、代码运行环境

MATLAB2017a及更新版本。

二、程序介绍

此图像的alt属性为空;文件名为image-5.png

1.demo_tSNE.m文件

t分布-随机邻近嵌入t-SNE降维函数kTSNE.m的测试脚本文件,可以直接运行。程序运行完成后,会绘制出如下一张图:

此时在工作区能找到t-SNE降维后的变量:rsneFea

另外:

options.NumDimensions = 2 ;  %降维后的数据维度,默认为2

改成

options.NumDimensions = 3 ; %降维后的数据维度,默认为2

之后,重新运行,将会绘制出下图:

2.kTSNE.m文件

t-SNE降维和画图的主函数文件。

t-SNE降维以及画图功能全部封装在此函数。注意不能直接运行该函数文件,而要参照demo_tSNE.m文件的写法进行函数调用。

function tsneVal = kTSNE(Fea,options,species,figflag)
%% 执行数据的t-sne降维,需要MATLAB2017a及以上版本
%% 可以实现2维、3维以及更高维度的降维,只有二维和三维可以画图
% 输入:
% Fea:待降维数据,R*Q的矩阵,R为批次数,Q为特征维度,例如特征维度为8的共100组数,tempFea的维度应为100*8。输入该变量时一定要注意行列方向是否正确,如不正确需要转置
% options:一些与tsne降维有关的设置,使用结构体方式赋值,比如 options.Algorithm = 'barneshut',具体包括:
%              -Algorithm:tsne算法,可选:'barneshut' (默认) |'exact'。其中'barneshut'执行近似优化,数据量大时,速度更快。
%              -Distance:距离量度方法选择,可选:'euclidean' (default) | 'seuclidean' | 'cityblock' | 'chebychev' | 'minkowski' | 'mahalanobis' | 'cosine' | 'correlation' | 'spearman' | 'hamming' | 'jaccard'
%                         具体描述见:https://ww2.mathworks.cn/help/stats/tsne.html?s_tid=doc_ta
%              -Exaggeration:数据中自然聚类的大小,整型数据,默认为4
%              -NumDimensions:降维后的数据维度,默认为2
%              -LearnRate:优化过程的学习速率,指定为正标量。通常设置值为100到1000。
%              -Standardize:输入数据是否进行标准化,false (默认) | true
%              -Perplexity:困惑度。即每个点的有效局部邻居数,指定为正标量。更大的困惑度会使更多的点作为最近的邻居。一般情况下,困惑度值的范围在5到50之间
% species:分组变量,可以是数组、数值向量、字符数组、字符串数组等,但是需要注意此变量维度需要与Fea的组数一致。该变量可以不赋值,调用时对应位置写为[]即可
%          例如species可以是[1,1,1,2,2,2,3,3,3]这样的数组,代表了Fea前3行数据为第1组,4-6行数据为第2组,7-9行数据为第三组。
%          关于此species变量更多信息,可以查看下述链接中的"Grouping variable":
%          https://ww2.mathworks.cn/help/stats/gscatter.html?s_tid=doc_ta#d124e492252
% 
% figflag:是否画图,'on'为画图,'off'为不画,只有NumDimensions为2或者3时起作用,3以上无法画图

三、快速开始

1.运行测试脚本

先在MATLAB里打开下载好的文件夹,然后运行demo_tSNE.m程序,程序运行完毕后如果没报错,且正常画出分布图像,则说明运行环境正常,程序正确。

2.修改仿真数据/导入数据

复制一个demo_tSNE.m的文件副本,在这个副本里做如下修改:

(1)第一种情况,你可能想要对你自己要研究的数据进行降维,此时你需要对 demo_tSNE.m 脚本文件中的第1小节内容进行修改替换即可。需要注意的是,请最好保持变量名的一致,即将待降维的矩阵命名为data。此时数据替换完成。

(2)第二种情况,你可能是想对一段真实采集的数据进行滤波,此时需要根据你的文件类型的不同(excel,txt,csv等),将数据导入MATLAB的方法有所不同。同学们可以看博主针对常用文件的导入方法的这个教程,教程上未包含的数据类型,大家可以再参考这个文档导入完成后请将这个待降维信号命名为data

3.实现t-SNE降维

参照 demo_tSNE.m文件中第二步,按照实际需求设置options.NumDimensions 、options.Standardize、options.Exaggeration、options.Perplexity、options.LearnRate、及figflag等参数的值。

运行程序即可。

四、关于完整版与公开版代码

功能完整版公开版
数据导入、参数设置、实现t-SNE降维
软件全部源码(函数m文件)×
画图无水印×
降维数据长度无限制150以内

五、获取公开版程序(需使用电脑浏览器打开)

tSNE代码(公开版)

注:公开版代码需使用MATLAB2022a及以上版本

六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需39元)。付款完成后刷新一下本页面即可看到下载链接。

(注意支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 39元 才能查看此处内容!立即支付

七、完整版代码重要更新

20230327 完成初版代码

八、常见问题

问题1:该降维方法只能降维到二维或者三维吗?

降维方法可以将高维数据降至任意低维度,而不仅仅是二维或三维。具体的降维维度取决于你的需求和应用场景。不过降维到二维或者三维可以进行可视化展示,更高维度则不行。