文章目录

  • 1.概述
    • 1.1 什么是TSNE
    • 1.2 TSNE原理
      • 1.2.1入门的原理介绍
      • 1.2.2进阶的原理介绍
        • 1.2.2.1 高维距离表示
        • 1.2.2.2 低维相似度表示
        • 1.2.2.3 惩罚函数
        • 1.2.2.4 为什么是局部相似性
        • 1.2.2.5 为什么选择高斯和t分布
  • 2 python实现
  • 参考内容

喜欢的话请关注我们的微信公众号~《你好世界炼丹师》。

  • 公众号主要讲统计学,数据科学,机器学习,深度学习,以及一些参加Kaggle竞赛的经验。
  • 公众号内容建议作为课后的一些相关知识的补充,饭后甜点。
  • 此外,为了不过多打扰,公众号每周推送一次,每次4~6篇精选文章。

微信搜索公众号:你好世界炼丹师。期待您的关注。


1.概述

1.1 什么是TSNE

  • TSNE是由T和SNE组成,T分布和随机近邻嵌入(Stochastic neighbor Embedding).
  • TSNE是一种可视化工具,将高位数据降到2-3维,然后画成图。
  • t-SNE是目前效果最好的数据降维和可视化方法
  • t-SNE的缺点是:占用内存大,运行时间长。

1.2 TSNE原理

1.2.1入门的原理介绍

举一个例子,这是一个将二维数据降成一维的任务。我们要怎么实现?


首先,我们想到的最简单的方法就是舍弃一个维度的特征,将所有点映射到x轴上:

很明显,结果来看,蓝色和黄色的点交叠在一起,可是他们在二维上明明不属于一类


TSNE就是计算某一个点到其他所有点的距离,然后映射到t分布上,效果就会好一些。

1.2.2进阶的原理介绍

  • t-SNE的降维关键:把高纬度的数据点之间的距离转化为高斯分布概率

1.2.2.1 高维距离表示

  • 如果两个点在高维空间距离越近,那么这个概率值越大。
  • 我们来看下面公式,两个公式的内容一致,只是写法不同。
    P j ∣ i = e − ∣ ∣ x i − x j ∣ ∣ 2 2 σ i 2 ∑ i ≠ k e − ∣ ∣ x i − x k ∣ ∣ 2 2 σ i 2 P_{j|i} = \frac{e^{\frac{-||x_i-x_j||^2}{2\sigma_i^2}}}{\sum_{i\not=k}e^{\frac{-||x_i-x_k||^2}{2\sigma_i^2}}} Pji=i=ke2σi2xixk2e2σi2xixj2
    这个形式的公式,只是明显的展示这是高斯分布概率

P j ∣ i = e x p ( − ∣ ∣ x i − x k ∣ ∣ 2 / ( 2 σ i 2 ) ) ∑ i ≠ k e x p ( − ∣ ∣ x i − x k ∣ ∣ 2 / ( 2 σ i 2 ) ) P_{j|i} = \frac{exp(-||x_i-x_k||^2/(2\sigma_i^2))}{\sum_{i\not=k}exp(-||x_i-x_k||^2/(2\sigma_i^2))} Pji=i=kexp(xixk2/(2σi2))exp(xixk2/(2σi2))
∣ ∣ x i − x k ∣ ∣ 2 ||x_i-x_k||^2 xixk2是两个点之间的距离;
距离越大, e x p ( − ∣ ∣ x i − x k ∣ ∣ 2 / ( 2 σ i 2 ) ) exp(-||x_i-x_k||^2/(2\sigma_i^2)) exp(xixk2/(2σi2))越小;
距离越小, e x p ( − ∣ ∣ x i − x k ∣ ∣ 2 / ( 2 σ i 2 ) ) exp(-||x_i-x_k||^2/(2\sigma_i^2)) exp(xixk2/(2σi2))越大;
分母是一个常数,对于一个固定的点 x i x_i xi;


  • 这个算法的创新点σ i \sigma_i σi对于每一个 x i x_i xi都是不同的,是由事先设定的困惑性影响, σ i \sigma_i σi是自动设定的。

现在我们能得到 p j ∣ i p_{j|i} pji,然后计算联合分布
P i j = P j ∣ i + P i ∣ j 2 N P_{ij} = \frac{P_{j|i}+P_{i|j}}{2N} Pij=2NPji+Pij


  • 从上文中,我们用高斯分布概率来表示两个高维点之间的相似性,再次复述一次两个点越相似, p i j p_{ij} pij越大

1.2.2.2 低维相似度表示

  • 在低纬度中,我们使用t分布来表示相似性。这里不探究为什么使用t分布而不是其他分布,具体内容可以看论文

Q i j = ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 ∑ k ≠ l ( 1 + ∣ ∣ y k − y l ∣ ∣ 2 ) − 1 Q_{ij} = \frac{(1+||y_i-y_j||^2)^{-1}}{\sum_{k\not=l}(1+||y_k-y_l||^2)^{-1}} Qij=k=l(1+ykyl2)1(1+yiyj2)1
y i , y j y_i,y_j yi,yj是低纬度的点


1.2.2.3 惩罚函数

  • 现在我们有方法衡量高纬度和低纬度的点的相似性,我们如何保证高纬度相似度高的点在低纬度相似度也高?
  • t-SNE使用的是KL散度(Kullback-Leibler divergence)
    K L ( P ∣ Q ) = ∑ i ≠ j P i j log ⁡ P i j Q i j KL(P|Q) = \sum_{i\not=j}P_{ij}\log\frac{P_{ij}}{Q_{ij}} KL(PQ)=i=jPijlogQijPij

1.2.2.4 为什么是局部相似性

  • P i j P_{ij} Pij很大, Q i j Q_{ij} Qij很小(高维空间距离近,低维空间距离远)的惩罚很大,但是高维空间距离远,低维空间距离近的惩罚小。

1.2.2.5 为什么选择高斯和t分布

  • 降维必然带来信息损失,TSNE保留局部信息必然牺牲全局信息,而因为t分布比 高斯分布更加长尾,可以一定程度减少这种损失。

2 python实现

函数参数表:

  • parameters 描述
  • n_components 嵌入空间的维度
  • perpexity 混乱度,表示t-SNE优化过程中考虑邻近点的多少,默认为30,建议取值在5到50之间
  • early_exaggeration 表示嵌入空间簇间距的大小,默认为12,该值越大,可视化后的簇间距越大
  • learning_rate 学习率,表示梯度下降的快慢,默认为200,建议取值在10到1000之间
  • n_iter 迭代次数,默认为1000,自定义设置时应保证大于250
  • min_grad_norm 如果梯度小于该值,则停止优化。默认为1e-7
  • metric 表示向量间距离度量的方式,默认是欧氏距离。如果是precomputed,则输入X是计算好的距离矩阵。也可以是自定义的距离度量函数。
  • init 初始化,默认为random。取值为random为随机初始化,取值为pca为利用PCA进行初始化(常用),取值为numpy数组时必须shape=(n_samples, n_components)
  • verbose 是否打印优化信息,取值0或1,默认为0=>不打印信息。打印的信息为:近邻点数量、耗时、σ
    、KL散度、误差等
  • random_state 随机数种子,整数或RandomState对象
  • method 两种优化方法:barnets_hut和exact。第一种耗时O(NlogN),第二种耗时O(N^2)但是误差小,同时第二种方法不能用于百万级样本
  • angle 当method=barnets_hut时,该参数有用,用于均衡效率与误差,默认值为0.5,该值越大,效率越高&误差越大,否则反之。当该值在0.2-0.8之间时,无变化。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import manifold,datsets
'''X是特征,不包含target;X_tsne是已经降维之后的特征'''
tsne = manifold.TSNE(n_components=2, init='pca', random_state=501)
X_tsne = tsne.fit_transform(X)
print("Org data dimension is {}. Embedded data dimension is {}".format(X.shape[-1], X_tsne.shape[-1]))'''嵌入空间可视化'''
x_min, x_max = X_tsne.min(0), X_tsne.max(0)
X_norm = (X_tsne - x_min) / (x_max - x_min)  # 归一化
plt.figure(figsize=(8, 8))
for i in range(X_norm.shape[0]):plt.text(X_norm[i, 0], X_norm[i, 1], str(y[i]), color=plt.cm.Set1(y[i]), fontdict={'weight': 'bold', 'size': 9})
plt.xticks([])
plt.yticks([])
plt.show()

参考内容

  1. sklearn中tsne可视化
  2. 笔记 | 什么是TSNE
  3. 理解TSNE算法

TSNE高维数据降维可视化工具 + python实现相关推荐

  1. 两组声音的一维数据如何比较相似度_TSNE高维数据降维可视化工具 入门到理解 + python实现...

    1 什么是TSNE? TSNE是由T和SNE组成,T分布和随机近邻嵌入(Stochastic neighbor Embedding). TSNE是一种可视化工具,将高位数据降到2-3维,然后画成图. ...

  2. tSNE—高维数据降维可视化(理论部分)

    t-SNE是一种降维方法,PCA主成分分析.LDA等属于线性降维,t-SNE属于非线性降维,是一种流形学习方法(Manifold Learning). 如图所示的曲面上,两点之间的欧式距离为红色虚线所 ...

  3. 【Gensim + TSNE使用】word2vec词向量处理中文小说 (词嵌入、高维数据降维)

    [Gensim + TSNE使用]word2vec词向量处理中文小说 本文使用Gensim对小说斗破苍穹进行词嵌入可视化 流程 数据预处理,将小说数据滤除停止词,分词book_loader(). 调用 ...

  4. ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例

    ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 目录 基于鸢尾花(Iris)数据集利用多种降维算法(PCA ...

  5. 高维数据降维(机器学习)

    目录 一.实验内容 二.实验过程 1.算法思想 2.算法原理 3.算法分析 三.源程序代码 四.运行结果及分析 五.实验总结 一.实验内容 熟知高维数据降维的概念和基本算法思想: 掌握高维数据降维算法 ...

  6. 高维信息降维可视化常用算法比较

    我们人类比较容易理解三维以内的信息,在做数据分析挖掘以前,先要对数据集有个浅显的认识,比如统计分布.可视化.相关性等.这里引入了常用降维算法模型原理,对MNIST 784维数据做可视化和结果对比展示, ...

  7. 高维数据降维 国家自然科学基金项目 2009-2013 NSFC Dimensionality Reduction

    2013 基于数据降维和压缩感知的图像哈希理论与方法 唐振军 广西师范大学 多元时间序列数据挖掘中的特征表示和相似性度量方法研究 李海林 华侨大学       基于标签和多特征融合的图像语义空间学习技 ...

  8. 降维算法PCA的应用----高维数据的可视化

    文章目录 序言 废话不多说看代码 导入相关模块 数据提取 降维 降维后数据信息展示 新的特征矩阵 可视化 关于X_dim2[y==i, 0]的解释 总结 序言 当我们拿到一堆数据的时候,几乎不可能通过 ...

  9. Python 高维数据降维聚类显示

    先用 t-SNE 将数据进行降维,然后再依据聚类,做完聚类的结果在降维数据展示就可以了. from sklearn import manifold from sklearn.cluster impor ...

最新文章

  1. ES6基础之Array.fill函数
  2. gram矩阵_ZEN-基于N-gram的中文Encoder
  3. 重磅!阿里达摩院发布《2020十大科技趋势》
  4. 案例:文件下载需求:1. 页面显示超链接 2. 点击超链接后弹出下载提示框 3. 完成图片文件下载||中文文件问题
  5. anaconda应答文件
  6. kubesphere 3.0离线安装
  7. Angular form 官网文档的学习笔记:Angular两种实现form的方式
  8. wordList04
  9. 上海交大原副校长毛军发院士,履新深圳大学校长
  10. Spring Boot(19)---开发Web应用之Thymeleaf篇
  11. LeetCode 字符串简单部分 算法 python实现
  12. 特斯拉宣布总部将从加州硅谷迁到得州
  13. 配置多个git账号_Git ssh配置(Mac)
  14. sidirect 连接西门子_Intouch 与 CP343-1 通讯设置
  15. java 高斯投影_高斯投影正算公式以及java代码
  16. OMNeT++理论算法仿真详述
  17. Nginx优化---防盗链--网页缓存--网页压缩--日志分割
  18. MDCC 2014移动开发人员大会參会实录
  19. ECS云服务器详细配置
  20. Android 中app加固与瘦身

热门文章

  1. OpenWRT 程序开机启动
  2. HTML语言中I标记,HTML: i 标签
  3. ITE平台开发 chapter 2-简单Debug01
  4. Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉
  5. 第一个Physx例子
  6. 玩过这些经典单机游戏_就说明你已经老了
  7. 解决Windows出现找不到msxml3r.dll文件的问题
  8. 文件压缩(文件夹中有文件夹)
  9. ChatGPT会给程序员带来失业潮吗?
  10. linux sd卡驱动教程,Linux SD卡驱动开发(四) —— SD 控制器之真正的硬件操作