t-SNE降维可视化

目录

 1.高斯分布:

 2.卡方分布:

 3.t分布

4. t-SNE(t-Distributed Stochastic Neighbor Embedding)

 (1)在高维空间构建一个概率分布拟合高维样本点间的相对位置关系。

 (2)在低维空间,也构建一个概率分布,拟合低维样本点之间的位置关系。

5. SNE的缺点以及解决措施


 1.高斯分布:

 2.卡方分布:

 若n个相互独立的随机变量, 均服从标准正态分布(独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律成为x2分布,参数n=v,记为Q~x2(v)。

 3.t分布

设随机变量X~ N(0,1)(标准正态分布),Y~x2 (n)(自由度为n的卡方分布),且X与Y相互独立,则称随机变量 服从自由度为n的t分布,t分布在自由度较低时相对标准正态分布表现更柔和(矮胖)。记为:

4. t-SNE(t-Distributed Stochastic Neighbor Embedding

 (1)在高维空间构建一个概率分布拟合高维样本点间的相对位置关系。

以样本xi为中心,不同样本点与xi的相对位置的概率分布。

 衡量两个样本间的距离,距离越大,概率 越小。分母累加求和为了归一化。

 (2)在低维空间,也构建一个概率分布,拟合低维样本点之间的位置关系。

(3) 通过学习,调整低维数据点,令两个分布接近。利用KL散度(距离)衡量两个分布之间的差异。通过梯度下降调整低维空间的样本点y使得C变小,实现降维。

目标yi对应xi投影到低维空间,调整yj使得KL散度(可看做损失函数)最小,即低维空间与高位空间的位置分布尽可能一致。

本质:高维空间样本位置关系的分布投影至低维空间时保持不变。

5. SNE的缺点以及解决措施

(1)距离不对称 利用联合概率代替条概率。

 

(2)拥挤现象

从高维到低维进行转换的过程中,低维点的距离无法建模高维点之间的位置关系。高维空间中距离较大的点对,在低维空间距离会变得较小。

解决:利用拖尾较大的t分布对低维点建模。

 

使用t分布后,在正态分布中距离较小的点,可保持相同的概率在t分布中获得更小的距离(拉近高维空间中距离较近的点)。在正态分布中距离较大的点,可保持相同的概率在t分布中获得更大的距离(排斥高维空间中距离较远的点)

(3)的物理意义,影响高维空间中高斯分布的形状

类似于K紧邻中的搜索半径,当xi临近点较多时,减小 ;当xi临近点较少时,增大 。

t-SNE是一种集降维与可视化于一体的技术,它是基于SNE可视化的改进,解决了SNE在可视化后样本分布拥挤、边界不明显的特点,是目前最好的降维可视化手段。

t-SNE目标函数:原空间与嵌入空间样本分布之间的KL散度。

t-SNE优化算法:梯度下降。

t-SNE注意问题:KL散度作目标函数是非凸的,对初值敏感,需要多次初始化以防止陷入局部次优解

(4)影响效果的参数

perplexity 混乱度。混乱度越高,t-SNE将考虑越多的邻近点,更关注全局。因此,对于大数据应该使用较高混乱度,较高混乱度也可避免噪声的影响。相对而言,该参数对可视化效果影响不大。

early exaggeration factor 该值表示期望的簇间距大小,如果太大的话(大于实际簇的间距),将导致目标函数无法收敛。相对而言,该参数对可视化效果影响较小,默认就行。

learning rate 学习率。关键参数,根据具体问题调节。

maximum number of iterations 迭代次数。迭代次数不能太低,建议1000以上。

angle (not used in exact method) 角度。相对而言,该参数对效果影响不大。

T-SNE就是一种数据降维的算法,其成立的前提是基于这样的假设:尽管现实世界中的许多数据集是嵌入在高维空间中,但是都具有很低的内在维度。即高维数据经过降维后,在低维状态下更能显示出其本质特性。这就是流行学习的基本思想,也称为非线性降维。

 python的学习还是要多以练习为主,想要练习python的同学,推荐可以去看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费。

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网求职之前,先上牛客,就业找工作一站解决。互联网IT技术/产品/运营/硬件/汽车机械制造/金融/财务管理/审计/银行/市场营销/地产/快消/管培生等等专业技能学习/备考/求职神器,在线进行企业校招实习笔试面试真题模拟考试练习,全面提升求职竞争力,找到好工作,拿到好offer。https://www.nowcoder.com/link/pc_csdncpt_ssdxjg_python

他们这个python的练习题,知识点编排详细,题目安排合理,题目表述以指导的形式进行。整个题单覆盖了Python入门的全部知识点以及全部语法,通过知识点分类逐层递进,从Hello World开始到最后的实践任务,都会非常详细地指导你应该使用什么函数,应该怎么输入输出。

牛客网(牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网)还提供题解专区和讨论区会有大神提供题解思路,对新手玩家及其友好,有不清楚的语法,不理解的地方,看看别人的思路,别人的代码,也许就能豁然开朗。

快点击下方链接学起来吧!

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网

参考:

(1条消息) t-SNE高维数据可视化(python)_haoji007的博客-CSDN博客_python高维数据可视化https://blog.csdn.net/haoji007/article/details/94962952python与人工智能-数据降维-t-SNE_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1cU4y1w74A?spm_id_from=333.337.top_right_bar_window_history.content.click

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用 PyTorch 和 scikit-learn 实现的 DANN 特征提取器 t-SNE 降维可视化代码: ```python import torch import torch.nn.functional as F import matplotlib.pyplot as plt from sklearn.manifold import TSNE # 加载数据集 train_loader = torch.utils.data.DataLoader( torchvision.datasets.MNIST('/files/', train=True, download=True, transform=torchvision.transforms.Compose([ torchvision.transforms.ToTensor(), torchvision.transforms.Normalize( (0.1307,), (0.3081,)) ])), batch_size=64, shuffle=True) # 定义 DANN 特征提取器 class FeatureExtractor(torch.nn.Module): def __init__(self): super(FeatureExtractor, self).__init__() self.conv1 = torch.nn.Conv2d(1, 64, kernel_size=5) self.conv2 = torch.nn.Conv2d(64, 50, kernel_size=5) self.conv2_drop = torch.nn.Dropout2d() self.fc1 = torch.nn.Linear(50*4*4, 100) self.fc2 = torch.nn.Linear(100, 10) def forward(self, x): x = F.relu(F.max_pool2d(self.conv1(x), 2)) x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2)) x = x.view(-1, 50*4*4) x = F.relu(self.fc1(x)) x = F.dropout(x, training=self.training) x = self.fc2(x) return x # 加载模型参数 model = FeatureExtractor() model.load_state_dict(torch.load('dann_feature_extractor.pth')) # 提取特征向量 features = [] labels = [] for data, target in train_loader: features.append(model(data).detach().numpy()) labels.append(target.detach().numpy()) features = np.concatenate(features, axis=0) labels = np.concatenate(labels, axis=0) # 使用 t-SNE 进行特征降维 tsne = TSNE(n_components=2, random_state=0) features_tsne = tsne.fit_transform(features) # 可视化降维后的特征向量 for i in range(10): plt.scatter(features_tsne[labels==i, 0], features_tsne[labels==i, 1], label=str(i)) plt.legend() plt.show() ``` 这里使用了 MNIST 数据集进行测试,可以替换成其他数据集。运行代码后将会显示出降维后的特征向量的散点图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山上的小酒馆

谢谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值