t_SNE 非线性降维基础原理

简介: 本文记录了个人关于 非线性降维算法 t-SNE(t-Distributed Stochastic Neighbor Embedding)的学习理解,以供参考学习

1、PCA 线性降维

PCA 作为一种线性降维算法,它的线性体现在其本质是观察坐标系替换的时候,新坐标轴的生成本质是原始特征的一个线性组合,最后通过删减可解释方差最小的主成分完成数据的特征降维。

2、非线性降维

对于非线性降维算法,在于它不是寻找基于原始特征线性组合的方式生成新观察坐标系,而是关注数据集中相邻样本之间的相似性,并试图在低维空间中再现这些相似性。

2.1 t_SNE 降维策略

t_SNE 算法策略在于首先计算了高维空间中样本与样本间的欧式距离并转换为相似性分数,然后在一个二维空间上通过随机化所有样本并持续移动这些样本(移动过程基于KL散度建模),使得它们在二维空间中彼此间的距离与原始高维空间中的距离分布尽可能相似完成降维。

优点: t_SNE 相比 PCA 方法主要更好地 突出 数据集中的成簇特征。
缺点

  • ①生成的( tsne_1 和 tsne_2 特征轴 ) 不具有可解释性,因为它们不代表原始特征的逻辑组合,像 PCA 方法就可以清楚的根据特征向量解析主成分轴上原始特征的方差贡献情况。
  • ② t-SNE 在低维空间中的距离主要用来反映簇内样本间的相似性,但 簇间的距离不具有意义。比如对于在 t-SNE 中展示的3个集簇:两个距离很近,第三个距离另外两个很远,但不能说前两个簇彼此之间的相似性比它们与第三个集群之间的相似性更高。
  • 主要用于可视化,很难用于其他目的。

2.2 基本过程

step.1 首先计算原始高维空间内两两样本间的 欧式距离;然后通过高斯函数模型(高斯核)将距离度量矩阵转换成样本间的相似性分数矩阵 $X_{raw}$。由于 高斯核 受样本方差的影响,直接转换出的相似性分数对于一些稀疏的簇可能无法表征簇特征(因为样本间相似度变得很低),所以为了不同 $\sigma$ 参数计算的相似性分数变得可比同时在矩阵中突出簇特征,需要对原始的分数基于行进行比例归一化处理($p_{ij\_scale} = \frac {p_{ij}}{sum(p_i)}$)。

step.2 接下来初始化两个 tsne特征轴 并生成随机分布的所有样本。在这个二维空间内计算样本间的距离,并使用 t-分布概率密度函数 转换距离矩阵为相似性分数矩阵$X_{new}$。

t-SNE 本质是方法源于 SNE 降维策略提出的优化方法,SNE 在低维空间下也使用高斯函数来表达两点之间的相似度,但在低维后容易发生 crowding problem (拥挤问题,指的是各个簇聚集在一起无法区分)。 t-SNE 方法的提出主要是为了解决前者降维后所发生的 拥挤问题,在低维空间下使用了 t分布 替代高斯分布来表达两点之间的相似度, t分布 相比高斯分布函数曲线更平坦和具有更长的拖尾,这意味着高维空间内中低等相似的两个样本在低维空间的距离需要被放大(同理缩小相似样本的距离), t-分布概率密度函数 转换出的相似度才能与高斯核的结果相同。因此 t分布 的引入很好地满足了使得同一簇内的点(距离较近)聚合的更紧密,不同簇之间的点(距离较远)更加疏远的可视化目标。

step.3 最后一步就是根据两个相似性分数矩阵 $X_{raw}$ 和 $X_{new}$ 的差异性,使用 KL散度统计量 建模优化目标,计算梯度来移动初始化的系列样本点,使得每个样本都向高维特征空间中靠近它的样本点 靠拢,并 远离 高维特征空间中远离它的其它样本点。从而逐渐减少两个相似性分数矩阵的差异,也就是两个矩阵的KL散度统计量,一定迭代次数后收敛在低 KL 散度的获得tsne降维结果。
$$ C = \sum_{i}KL(P_i\|Q_i) = \sum_i\sum_j{p_{j|i}\log{\frac {p_{j|i}}{q_{j|i}}}}$$
$P$ 是高维空间上的相似性矩阵;$Q$ 是每次迭代后低维空间上的相似性矩阵。

tsne 使用KL散度(相对熵)作为损失函数存在罚分不对称的问题,即对于高维近低维远的情况罚分高(p = 0.99,q= 0.0001,cost = 0.99*log(0.99/0.0001) = 9),反过来对于高维远低维近的极端情况罚分却趋近于零(p = 0.0001,q= 0.99,cost = 0.0009)。从而导致目标点的移动过程中属于高维近低维远情况的移动步长更长($\frac {\partial C}{\partial q} = -\frac {p}{q}$),发生迭代到最后低维空间上出现整体相似的簇之间的距离比与不相似的簇之间的距离还要远的情况。也就是 tSNE 降维结果在全局结构上存在失真可能,所以 t-SNE 通常被认为在低维表示中主要保留相似样本的簇特征,但它不保留全局结构。最终表示中彼此接近的样本可以解释为彼此相似,但不能轻易说出原始数据中哪些样本簇与其它样本簇更相似。


Reference

① t-SNE 算法过程
② tsney与umap的差别
③ Maximizing similarity with t-SNE and UMAP
④ Softmax函数和交叉熵Cross-entropy以及KL散度求导_winycg的博客-CSDN博客_kl散度求导

目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 编解码
大模型应用:CLIP 模型全维度解析:理解理论基础强化基础范例.16
CLIP是OpenAI提出的跨模态模型,通过对比学习将图像与文本映射至统一语义空间,实现零样本图文对齐。无需微调即可完成图像分类、图文检索等任务,显著降低标注成本,成为多模态AI的核心基础。
2113 21
|
搜索推荐 Python
推荐系统测评指标——计算DCG、IDCG以及nDCG的python代码
推荐系统测评指标——计算DCG、IDCG以及nDCG的python代码
推荐系统测评指标——计算DCG、IDCG以及nDCG的python代码
|
10月前
|
存储 搜索推荐 算法
Java 大视界 -- Java 大数据在智慧文旅旅游线路规划与游客流量均衡调控中的应用实践(196)
本实践案例深入探讨了Java大数据技术在智慧文旅中的创新应用,聚焦旅游线路规划与游客流量调控难题。通过整合多源数据、构建用户画像、开发个性化推荐算法及流量预测模型,实现了旅游线路的精准推荐与流量的科学调控。在某旅游城市的落地实践中,游客满意度显著提升,景区流量分布更加均衡,充分展现了Java大数据技术在推动文旅产业智能化升级中的核心价值与广阔前景。
|
机器学习/深度学习 数据采集 前端开发
深入探讨模型泛化能力的概念、重要性以及如何通过交叉验证来有效评估和提升模型的泛化能力
【6月更文挑战第13天】本文探讨了机器学习中模型泛化能力的重要性,它是模型对未知数据预测的准确性。过拟合和欠拟合影响泛化能力,而交叉验证是评估模型性能的有效工具。通过K折交叉验证等方法,可以发现并优化模型,提高泛化能力。建议包括调整模型参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
2149 7
|
机器学习/深度学习 算法 文件存储
YOLOv8改进 | 主干篇 | 利用MobileNetV3替换Backbone(轻量化网络结构)
YOLOv8改进 | 主干篇 | 利用MobileNetV3替换Backbone(轻量化网络结构)
1554 0
YOLOv8改进 | 主干篇 | 利用MobileNetV3替换Backbone(轻量化网络结构)
|
IDE 安全 Java
阿里开发手册 嵩山版-编程规约 (九) 注释规约
《阿里开发手册 嵩山版》中关于注释规约的部分,强调了注释的重要性和编写规范,包括Javadoc的使用、类和方法注释的要求、以及如何有效使用注释来提高代码的可读性和维护性。
 阿里开发手册 嵩山版-编程规约 (九) 注释规约
|
前端开发 Java 应用服务中间件
在Linux中,tomcat和nginx的区别是什么?
在Linux中,tomcat和nginx的区别是什么?
|
机器学习/深度学习 缓存 数据可视化
[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity
[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity
905 1
[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity
|
数据采集 机器学习/深度学习 数据挖掘
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战