1、t-SNE概述

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

2、t-SNE 与 PCA

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

3、t-SNE 的工作原理

  t-SNE 算法包括两个主要阶段。首先,t-SNE 在成对的高维对象上构建概率分布,这样相似的对象被赋予更高的概率,而不同的点被赋予更低的概率。其次,t-SNE 定义了低维地图中点的相似概率分布,并且它最小化了两个分布之间关于地图中点位置的Kullback-Leibler 散度(KL散度)。虽然原始算法使用对象之间的欧几里得距离作为其相似性度量的基础,但可以酌情更改。

  t-SNE 已在广泛的应用中用于可视化,包括基因组学、计算机安全研究、自然语言处理、音乐分析、癌症研究、生物信息学、地质领域解释、和生物医学信号处理。

4、sklearn中的TSNE

  python中的TSNE函数原型如下,详情可访问sklearn。matlab也实现了TSNE。

class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate=‘warn’, n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric=‘euclidean’, init=‘warn’, verbose=0, random_state=None, method=‘barnes_hut’, angle=0.5, n_jobs=None, square_distances=‘legacy’)[source]
  其中perplexity是比较敏感的参数,从某种意义上说,该参数是对每个点的近邻数量的猜测。
看下面的示例,最左侧是原始分布,右侧五张图均为迭代5000次,但是perplexity分别为2、5、30、50、100,可以看出perplexity设置不同参数对于可视化影响非常大。

5、 相关示例

  参考代码,我们将从在 MNIST 数据集的一部分上执行 t-SNE 开始。MNIST 数据集由从 0 到 9 的手绘数字图像组成。准确分类每个数字是一个hello world级别的机器学习挑战。我们可以使用 sklearn 加载 MNIST 数据集。

from sklearn.datasets import fetch_openml
import numpy as np
import matplotlib.pyplot as plt# Load the MNIST data
X, y = fetch_openml('mnist_784', version=1, return_X_y=True, as_frame=False)# Randomly select 1000 samples for performance reasons
np.random.seed(100)
subsample_idc = np.random.choice(X.shape[0], 1000, replace=False)
X = X[subsample_idc,:]
y = y[subsample_idc]# Show two example images
fig, ax = plt.subplots(1,2)
ax[0].imshow(X[11,:].reshape(28,28), 'Greys')
ax[1].imshow(X[15,:].reshape(28,28), 'Greys')
ax[0].set_title("Label 3")
ax[1].set_title("Label 8")X.shape
# (1000, 784)
# 1000 Samples with 784 features
y.shape
# (1000,)
# 1000 labels
np.unique(y)
# array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], dtype=object)
# The 10 classes of the imagesfrom sklearn.manifold import TSNE
import pandas as pd
import seaborn as sns# We want to get TSNE embedding with 2 dimensions
n_components = 2
tsne = TSNE(n_components)
tsne_result = tsne.fit_transform(X)
tsne_result.shape
# (1000, 2)
# Two dimensions for each of our images# Plot the result of our TSNE with the label color coded
# A lot of the stuff here is about making the plot look pretty and not TSNE
tsne_result_df = pd.DataFrame({'tsne_1': tsne_result[:,0], 'tsne_2': tsne_result[:,1], 'label': y})
fig, ax = plt.subplots(1)
sns.scatterplot(x='tsne_1', y='tsne_2', hue='label', data=tsne_result_df, ax=ax,s=120)
lim = (tsne_result.min()-5, tsne_result.max()+5)
ax.set_xlim(lim)
ax.set_ylim(lim)
ax.set_aspect('equal')
ax.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0)

MNIST 子样本上的 t-SNE 示例

  MNIST 数据集(二维)上的测试结果

  olivetti人脸识别测试结果

6、tensorflow在线可视化

  下面的网址是可视化工具,其中可选一些数据集,以及可选降维方式包括UMAP、TSNE、PCA、自定义等等。

7、其它参考

https://projector.tensorflow.org/
https://lvdmaaten.github.io/tsne/
https://distill.pub/2016/misread-tsne/
https://danielmuellerkomorowska.com/2021/01/05/introduction-to-t-sne-in-python-with-scikit-learn/

机器学习笔记 - 什么是t-SNE?相关推荐

  1. 一份520页的机器学习笔记!附下载链接

    点击上方"视学算法",选择"星标"公众号 第一时间获取价值内容 近日,来自SAP(全球第一大商业软件公司)的梁劲(Jim Liang)公开了自己所写的一份 52 ...

  2. 700 页的机器学习笔记火了!完整版开放下载

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 作者       梁劲(Jim Liang),来自SAP(全球第一大商业软件公司). 书籍特点       条理清晰 ...

  3. 机器学习笔记十四:随机森林

    在上一篇机器学习笔记十三:Ensemble思想(上)中,简要的提了一下集成学习的原理和两种主要的集成学习形式.  而在这部分要讲的随机森林,就算是其中属于bagging思路的一种学习方法.为了篇幅,b ...

  4. 机器学习笔记七:损失函数与风险函数

    一.损失函数 回顾之前讲过的线性回归模型,我们为了要学习参数使得得到的直线更好的拟合数据,我们使用了一个函数 这个函数就是比较模型得到的结果和"真实值"之间的"差距&qu ...

  5. 吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection)

    吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection) 对于异常检测算法,使用特征是至关重要的,下面谈谈 ...

  6. Python机器学习笔记:sklearn库的学习

    自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类四大机器学习算法.还包括了特征提取,数据 ...

  7. 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火

    神经网络与机器学习 笔记-LMS(最小均方算法)和学习率退火 LMS算法和Rosenblatt感知器算法非常想,唯独就是去掉了神经元的压制函数,Rosenblatt用的Sgn压制函数,LMS不需要压制 ...

  8. 神经网络与机器学习 笔记—基本知识点(下)

                   神经网络与机器学习 笔记-基本知识点(下) 0.1 网络结构: 神经网络中神经元的构造方式与用于训练网络的学习算法有着密切的联系,有三种基本的网络结构: 0.7 知识表示 ...

  9. 神经网络与机器学习 笔记—基本知识点(上)

    神经网络与机器学习 笔记-基本知识点(上) 0.1 什么是神经网络: 神经网络是由简单处理单元构成的大规模并行分布处理器,天然具有存储经验知识和使之可用的特性.神经网络在两个方面与大脑类似. 神经网络 ...

  10. 机器学习笔记:为什么要对数据进行归一化处理?

    机器学习笔记:为什么要对数据进行归一化处理? rocling 于 2019-06-22 17:03:39 发布 7090  收藏 9 分类专栏: 人工智能 文章标签: 机器学习 归一化 版权 人工智能 ...

最新文章

  1. memcached在windows下的基本使用方法
  2. 5107LiveChatCode
  3. 【算法与数据结构】关于代码运行时间复杂度的计算方法
  4. ITK:演示可用的阈值算法
  5. 11082 完全二叉树的种类 O(n) 卡特兰数
  6. 区块链技术沙龙最全回顾:我们需要做怎样的区块链?
  7. 数据科学家数据分析师_使您的分析师和数据科学家在数据处理方面保持一致
  8. skywalking 引起 spring-cloud-gateway 的内存溢出 skywalking的bug
  9. java怎么使用泛型_java泛型 7 泛型的基本介绍和使用
  10. 判断表达式值是否为空_如何在 Python 中判断列表是否为空
  11. 来了!苹果二代AirPods 3月发布 全黑配色加入
  12. GDAL虚拟文件简介
  13. CPU缓存侧信道攻击
  14. hourstracker 考勤表软件下载
  15. 手把手教你申请计算机软件著作权(4)——资料邮寄
  16. Twitter上热门的技巧与思路
  17. 服务器:连接云服务器的端口是什么?
  18. Prometheus:Java调用PromQL工具类(瞬时数据查询)
  19. 云服务器ECS选购集锦之九云服务器选购常见FAQ
  20. 手机设置代理后无法上网

热门文章

  1. 五分钟读完《人性的弱点》
  2. 黑莓手机刷linux,黑莓老机型ROM刷机资源
  3. OSG开发笔记(二十三):Qt使用QOpenGLWidget渲染OSG和地球仪
  4. python多线程求合数个数_求十亿内所有质数的和,怎么做最快?
  5. QQ连连看6.0 逆向分析
  6. android工厂测试开发,Android开机启动工程测试APK功能开发
  7. 音频音乐与计算机的交融pdf,电脑音乐的研和应用.pdf
  8. 惠普怎样启动计算机上的无线功能,如何打开hp无线网卡?如何打开惠普笔记本电脑无线网卡...
  9. 20位顶级设计师的桌面环境
  10. linux仿win7软件,Ubuntu/Linux Mint用上仿Win7/Win8主题