t-SNE降维算法详解(附matlab代码)

什么是t-SNE

        t-SNE的主要用途是可视化和探索高维数据。 它由Laurens van der Maatens和Geoffrey Hinton在JMLR第九卷(2008年)中开发并出版。 t-SNE的主要目标是将多维数据集转换为低维数据集。 相对于其他的降维算法,对于数据可视化而言t-SNE的效果最好。 如果我们将t-SNE应用于n维数据,它将智能地将n维数据映射到3d甚至2d数据,并且原始数据的相对相似性非常好。与PCA一样,t-SNE不是线性降维技术,它遵循非线性,这是它可以捕获高维数据的复杂流形结构的主要原因。

t-SNE原理

首先,它将通过选择一个随机数据点并计算与其他数据点(|x—x|)的欧几里得距离来创建概率分布。 从所选数据点附近的数据点将获得更多的相似度值,而距离与所选数据点较远的数据点将获得较少的相似度值。 使用相似度值,它将为每个数据点创建相似度矩阵(S1)

由上图可知,我们可以说X1的邻域 N(X1)= {X2, X3, X4, X5, X6},这意味着X2,X3,X4,X5和X6是X1的邻居。 它将在相似度矩阵“ S1”中获得更高的价值。 这是通过计算与其他数据点的欧几里得距离来计算的。

另一方面,X20远离X1。 这样它将在S1中获得较低的值。

其次,它将根据正态分布将计算出的相似距离转换为联合概率。

通过以上的计算,t-SNE将所有数据点随机排列在所需的较低维度上。

t-SNE将再次对高维数据点和随机排列的低维数据点进行所有相同的计算。 但是在这一步中,它根据t分布分配概率。 这就是名称t-SNE的原因。t-SNE中使用t分布的目的是减少拥挤问题,t分布→视觉上t分布看起来很像正态分布,但尾部通常更胖,这意味着数据的可变性更高。

对于较低维的数据点,还将创建一个相似度矩阵(S2)。然后该算法将S1与S2进行比较,并通过处理一些复杂的数学运算来使S1与S2之间有所不同。包括使用两个分布之间的Kullback Leibler散度(KL散度)作为损失函数运行梯度下降算法。使用KL散度通过将两个分布之间相对于数据点位置的值最小化,帮助t-SNE保留数据的局部结构。

算法要点

t-SNE算法具有扩展密集簇并缩小稀疏簇的特点。

t-SNE不会保留群集之间的距离。

t-SNE是一种不确定性算法或随机算法,这就是为什么每次运行结果都会略有变化的原因。

即使它不能在每次运行中保留方差,也可以使用超参数调整来保留每个类之间的距离。

该算法涉及许多计算和计算。 因此,该算法需要大量时间和空间来计算。

困惑度(perplexity)是控制数据点是否适合算法的主要参数。 推荐范围是(5–50)。

困惑度应始终小于数据点的数量。

低困惑度→关心本地结构,并关注最接近的数据点。

高度困惑→关心全局结构。

t-SNE可以巧妙地处理异常值。

 matlab代码

clear all;
close all;
clc;

% 载入鸢尾花数据
A=xlsread('E:\IP9')
% load plot
% example1
% 欧式距离tsne结果
rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','euclidean');
figure;
gscatter(Y(:,1),Y(:,2),species)
title('Euclidean')




% example2
% 对比四种距离下的tsne降维效果
rng('default') % for reproducibility

Y = tsne(meas,'Algorithm','exact','Distance','mahalanobis');
figure
subplot(2,2,1)
gscatter(Y(:,1),Y(:,2),species)
title('Mahalanobis')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','cosine');
subplot(2,2,2)
gscatter(Y(:,1),Y(:,2),species)
title('Cosine')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','chebychev');
subplot(2,2,3)
gscatter(Y(:,1),Y(:,2),species)
title('Chebychev')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','euclidean');
subplot(2,2,4)
gscatter(Y(:,1),Y(:,2),species)
title('Euclidean')

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
T-SNE(t-distributed stochastic neighbor embedding)是一种机器学习算法,用于将高维数据降维至2维或3维,并进行可视化。它的基本思想是,如果在高维空间中两个数据点相似,那么在降维后的低维空间中它们应该离得很近。 T-SNE是由Laurens van der Maaten和Geoffrey Hinton在2008年提出的,它是SNE算法的改进版本。相对于SNE算法,T-SNE进行了几个改进,包括将SNE改为对称SNE以提高计算效率,并在低维空间中使用t分布来解决拥挤问题并优化SNE算法在关注局部特征而忽略全局特征方面的问题。实际上,T-SNE很少被用于降维,其主要应用领域是数据可视化。 尽管T-SNE在可视化方面效果好于SNE,但由于一些限制,它在实际应用中并不常用于降维。首先,当我们发现数据需要降维时,一般会使用线性降维算法如PCA,而不是非线性降维算法。其次,T-SNE通常将数据降到2维或3维进行可视化,但在降维时往往需要更高的维度,例如20维,而T-SNE算法使用自由度为1的t分布可能无法得到较好的效果。此外,T-SNE算法的计算复杂度较高,其目标函数是非凸的,可能得到局部最优解。 总的来说,T-SNE是一种适用于高维数据可视化的非线性降维算法,但在实际应用中需要考虑其计算复杂度和局限性。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *2* *3* [t-SNE算法](https://blog.csdn.net/sinat_20177327/article/details/80298645)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *4* [Machine Learning ——降维方法:t-SNE](https://blog.csdn.net/zzzzhy/article/details/80772833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行走的参考文献

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值