t-SNE

本文主要是对An Introduction to t-SNE with Python Example博客的翻译记录,和一些入门的Python代码,可以的话推荐阅读原文。

主要参考

介绍:
An Introduction to t-SNE with Python Example
GitHub:
sas-python-work/tSneExampleBlogPost.ipynb
t-SNE-tutorial
tSNE
tsne-pytorch
PintheMemory/tsnelib.py
加速包:
Multicore-TSNE
tsne-cuda

t-SNE介绍

t-Distributed Stochastic Neighbor Embedding (t-SNE) 是一种无监督的非线性技术,主要用于数据探索和高维数据的可视化。 简单来说,t-SNE 让您对数据在高维空间中的排列方式有一种感觉或直觉。 它由 Laurens van der Maatens 和 Geoffrey Hinton 于 2008 年开发。

简单来说就是高维数据可视化,目的是观察高维数据的之间的分布情况

t-SNE与PCA的区别

首先要注意的是,PCA 是在 1933 年开发的,而 t-SNE 是在 2008 年开发的。自 1933 年以来,数据科学领域发生了很大变化,主要是在计算和数据大小方面。 其次,PCA 是一种线性降维技术,旨在最大化方差并保持较大的成对距离。 换句话说,不同的事物最终会相距甚远。 这会导致可视化效果不佳,尤其是在处理非线性流形结构时。 将流形结构视为任何几何形状,例如:圆柱体、球体、曲线等。
t-SNE 与 PCA 的不同之处在于仅保留小的成对距离或局部相似性,而 PCA 关注的是保留大的成对距离以最大化方差。 Laurens 使用图 1 [1] 中的 Swiss Roll 数据集很好地说明了 PCA 和 t-SNE 方法。 您可以看到,由于这个玩具数据集(流形)的非线性和保留较大的距离,PCA 会错误地保留数据的结构。

t-SNE原理

t-SNE 算法计算高维空间和低维空间中实例对之间的相似性度量。 然后,它尝试使用成本函数优化这两个相似性度量。 让我们将其分解为 3 个基本步骤:

  1. 第一步,测量高维空间中点之间的相似度。 想想散布在二维空间上的一堆数据点(图 2)。 对于每个数据点 (xi),我们将在该点上以高斯分布为中心。 然后我们测量该高斯分布下所有点 (xj) 的密度。 然后对所有点重新归一化。 这为我们提供了所有点的一组概率 (Pij)。 这些概率与相似性成正比。 这意味着,如果数据点 x1 和 x2 在这个高斯圆下具有相等的值,那么它们的比例和相似性是相等的,因此它们在这个高维空间的结构中具有局部相似性。 高斯分布或圆可以使用所谓的 perplexity 来操纵,它会影响分布的方差(圆的大小)以及最近邻的数量。 perplexity 的正常范围在 5 到 50 之间 [2]。
  2. 第 2 步与第 1 步类似,但不是使用高斯分布,而是使用具有一个自由度的学生 t 分布,也称为柯西分布(图 3)。 这为我们提供了低维空间中的第二组概率(Qij)。 如图所示,学生 t 分布的尾部比正态分布更重。 厚重的尾巴可以更好地模拟远距离。
  3. 最后一步是我们希望这些来自低维空间 (Qij) 的概率集尽可能地反映高维空间 (Pij) 的概率。 我们希望这两个地图结构相似。 我们使用 Kullback-Liebler 散度 (KL) 测量二维空间的概率分布之间的差异。最后,我们使用梯度下降来最小化我们的 KL 成本函数。

t-SNE的Python实现

入门例子

import numpy as npfrom sklearn.manifold import TSNE
# For the UCI ML handwritten digits dataset
from sklearn.datasets import load_digits# Import matplotlib for plotting graphs ans seaborn for attractive graphics.
import matplotlib.pyplot as plt
import matplotlib.patheffects as pe
import seaborn as snsdef plot(x, colors):# Choosing color palette# https://seaborn.pydata.org/generated/seaborn.color_palette.htmlpalette = np.array(sns.color_palette("pastel", 10))# pastel, husl, and so on# Create a scatter plot.f = plt.figure(figsize=(8, 8))ax = plt.subplot(aspect='equal')sc = ax.scatter(x[:,0], x[:,1], lw=0, s=40, c=palette[colors.astype(np.int8)])# Add the labels for each digit.txts = []for i in range(10):# Position of each label.xtext, ytext = np.median(x[colors == i, :], axis=0)txt = ax.text(xtext, ytext, str(i), fontsize=24)txt.set_path_effects([pe.Stroke(linewidth=5, foreground="w"), pe.Normal()])txts.append(txt)plt.savefig('./digits_tsne-pastel.png', dpi=120)return f, ax, txtsdigits = load_digits()
print(digits.data.shape)
# There are 10 classes (0 to 9) with alomst 180 images in each class
# The images are 8x8 and hence 64 pixels(dimensions)# Place the arrays of data of each digit on top of each other and store in X
X = np.vstack([digits.data[digits.target==i] for i in range(10)])
# Place the arrays of data of each target digit by the side of each other continuosly and store in Y
Y = np.hstack([digits.target[digits.target==i] for i in range(10)])# Implementing the TSNE Function - ah Scikit learn makes it so easy!
digits_final = TSNE(perplexity=30).fit_transform(X)
# Play around with varying the parameters like perplexity, random_state to get different plotsplot(digits_final, Y)

生成的图片(分别是husl风格和pastel风格,每次运行结果不一样):


在前面的基础上换一种可视化风格:

def plot2(data, x='x', y='y'):sns.set_context("notebook", font_scale=1.1)sns.set_style("ticks")sns.lmplot(x=x,y=y,data=data,fit_reg=False,legend=True,height=9,hue='Label',scatter_kws={"s":200, "alpha":0.3})plt.title('t-SNE Results: Digits', weight='bold').set_fontsize('14')plt.xlabel(x, weight='bold').set_fontsize('10')plt.ylabel(y, weight='bold').set_fontsize('10')plt.savefig('./digits_tsne-plot2.png', dpi=120)import pandas as pd
data = {'x': digits_final[:, 0],'y': digits_final[:, 1],'Label': Y}
data = pd.DataFrame(data)
plot2(data)

生成的图片:

高级例子

分割网络特征t-SNE可视化

Pending…

t-SNE可视化-Python实现相关推荐

  1. python交互式绘图库_一个交互式可视化Python库——Bokeh

    本篇为<Python数据可视化实战>第十篇文章,我们一起学习一个交互式可视化Python库--Bokeh. Bokeh基础 Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Py ...

  2. caffe预测、特征可视化python接口调用

    转载自: 深度学习(九)caffe预测.特征可视化python接口调用 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/hjimce/articl ...

  3. 深度学习(九)caffe预测、特征可视化python接口调用

    caffe预测.特征可视化python接口调用 原文地址:http://blog.csdn.net/hjimce/article/details/48972877 作者:hjimce 网上有很多caf ...

  4. 如何使用Elasticsearch,Logstash和Kibana实时可视化Python中的日志

    by Ritvik Khanna Ritvik Khanna着 如何使用Elasticsearch,Logstash和Kibana实时可视化Python中的日志 (How to use Elastic ...

  5. [数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

    本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化.GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口.GeoPandas扩展了Pandas ...

  6. Day1.数据可视化-Python语法

    数据可视化-Python基础语法 Python简单? 想学好数据分析,最好最快的方式是掌握Python语言. Python语言的强大 简洁,有大量的第三方库,功能强大(数据科学领域) Numpy 科学 ...

  7. 可视化 | Python精美动态水球图

    文章目录 1. 准备工作 1.1 pyechars安装 1.2 导入模块 2. 绘制水球图 2.1 基本水球图 2.2 增加边框,改变形状 2.3 多波浪 2.4 增加标注,改变字体大小,改变填充颜色 ...

  8. 可视化 | Python绘制精美仪表盘

    文章目录 1. 准备工作 1.1 pyechars安装 1.2 导入模块 2. 绘制仪表盘 2.1 基本仪表盘 2.2 改变刻度盘半径,去掉文字标签 2.3 改变刻度盘颜色 2.4 纯数字显示标签 2 ...

  9. Python数据可视化 | Python实现Matplotlib系列colorbar的设置

    Python数据可视化 | Python实现Matplotlib系列colorbar的设置 目录 Python数据可视化 | Python实现Matplotlib系列colorbar的设置 color ...

  10. 视频教程-Python大数据可视化-Python

    Python大数据可视化 7年软件开发架构经验,12年IT培训经验,曾就职于拜特科技,金蝶软件,软酷网络等多家互联网公司.擅长Java EE,前端,iOS及大数据等技术方向的开发及教学.策划并撰稿大数 ...

最新文章

  1. 通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 解析办法
  2. 什么是视频会议?什么是H.323?SIP是什么协议?
  3. Python 【微视】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、西瓜视频、微信视频号等平台的视频自动化同步发布
  4. JMeter入门,测试计划编写(http请求)
  5. react中实现异步请求的方法一,react-thunk
  6. C语言malloc和calloc的区别
  7. leetcode104 二叉树的最大深度
  8. php之快速入门学习-9(switch)
  9. 程序员的压力有多大?
  10. bzoj1966 [AHOI2005]病毒检测 结论+暴力
  11. css悬浮在某个span后面,在contenteditable div中的span元素后面设置光标
  12. Mysql数据库的安装--三分钟搞定
  13. Text strings must be rendered within a Text component的一个情况
  14. 行业“地震” 监管机构对新车「辅助驾驶系统」评级“下手”
  15. 漫话:如何给女朋友解释什么是语法糖?
  16. CSS几种常见的页面布局方式介绍
  17. 【Python】多图形混合排版,如何在Matplotlib/Seaborn中实现?
  18. dz.27z.co index.php,【DZ插件】VIP客户组开通 v2.0.2(zms)
  19. 同网络的计算机能共享音箱吗,2019年PC“老爷机”局域网内DLNA共享音乐到小度智能音箱全记录...
  20. 算法基础11 —— 树入门(二叉树的遍历以及构造 + 普通树转换成二叉树 + 例题 + 二叉树的一些操作)

热门文章

  1. 飞信虚拟机支持数据库
  2. android木马的制作方法,实现木马病毒的详细步骤
  3. 快速清理C盘的四个方法
  4. html 实现复制功能
  5. java 行政区划编号_行政区划 | Java Service SDK | 开发支持 | 四维地图开放平台
  6. DM manager工具的使用
  7. Chromium OS Autotest 概述
  8. 时序分析-利用深度时空残差网络预测城市范围的交通流量
  9. 威金病毒完全解决方案篇
  10. linux系统怎么改待机时间,LINUX操作系统——易用程度/待机时间/连接功能_手机_手机其它OS-中关村在线...