摘要: 本文介绍 t-SNE 聚类算法, 分析其基本原理. 并从精度上与 PCA 等其它降维算法进行比较分析, 结果表明 t-SNE 算法更优越, 本文最后给出了 R,Python 实现的示例以及常见问题. t-SNE 算法用于自然语音处理, 图像处理等领域很有研究前景.
Saurabh 是一名数据科学家和软件工程师, 熟练分析各种数据集和开发智能应用程序. 他目前正在加州大学伯克利分校攻读信息和数据科学硕士学位, 热衷于开发基于数据科学的智能资源管理系统.
介绍
许多数据科学家经常面对的问题之一: 假设有一个包含数百个特征 (变量) 的数据集, 且对数据所属的域没有任何了解, 需要对该数据集识别其隐藏状态, 探索并分析. 本文将介绍一种非常强大的方法来解决该问题.
关于 PCA
现实中大多数人会使用 PCA 进行降维和可视化, 但为什么不选择比 PCA 更先进的东西呢? 关于 PCA 的介绍可以阅读该 文献 . 本文讲解比 PCA(1933)更有效的算法 t-SNE(2008).
本文内容
1 什么是 t-SNE?
2 什么是降维?
3 t-SNE 如何在维数降低算法空间中拟合
4 t-SNE 算法的细节
5 t-SNE 实际上是做什么?
6 用例
7 t-SNE 与其他降维算法相比
8 示例实现
R 语言
Python 语言
9 应用方面
数据科学家
机器学习骇客
数据科学爱好者
10 常见错误
1 什么是 t-SNE
(t-SNE)t 分布随机邻域嵌入 是一种用于探索高维数据的非线性降维算法. 它将多维数据映射到适合于人类观察的两个或多个维度.
2 什么是降维?
简而言之, 降维就是用 2 维或 3 维表示多维数据 (彼此具有相关性的多个特征数据) 的技术, 利用降维算法, 可以显式地表现数据.
3 t-SNE 如何在降维算法空间中拟合
常用的降维算法有:
1 PCA(线性)
2 t-SNE(非参数 / 非线性)
3 Sammon 映射(非线性)
4 Isomap(非线性)
5 LLE(非线性)
6 CCA(非线性)
7 SNE(非线性)
8 MVU(非线性)
9 拉普拉斯特征图(非线性)
只需要研究上述算法中的两种 --PCA 和 t-SNE.
PCA 的局限性
PCA 是一种线性算法, 它不能解释特征之间的复杂多项式关系. 而 t-SNE 是基于在邻域图上随机游走的概率分布来找到数据内的结构.
线性降维算法的一个主要问题是不相似的数据点放置在较低维度表示为相距甚远. 但为了在低维度用非线性流形表示高维数据, 相似数据点必须表示为非常靠近, 这不是线性降维算法所能做的.
4 t-SNE 算法的细节
4.1 算法
步骤 1:
随机邻接嵌入 (SNE) 通过将数据点之间的高维欧几里得距离转换为表示相似性的条件概率而开始, 数据点 xi,xj 之间的条件概率 pj|i 由下式给出:
其中σi 是以数据点 xi 为中心的高斯方差.
步骤 2:
对于高维数据点 xi 和 xj 的低维对应点 yi 和 yj 而言, 可以计算类似的条件概率 qj|i
SNE 试图最小化条件概率的差异.
步骤 3:
为了测量条件概率差的和最小值, SNE 使用梯度下降法最小化 KL 距离. 而 SNE 的代价函数关注于映射中数据的局部结构, 优化该函数是非常困难的, 而 t-SNE 采用重尾分布, 以减轻拥挤问题和 SNE 的优化问题.
步骤 4:
定义困惑度:
其中 H(Pi) 是香农熵
4.2 时间和空间复杂性
算法计算对应的是条件概率, 并试图最小化较高和较低维度的概率差之和, 这涉及大量的计算, 对系统资源要求高. t-SNE 的复杂度随着数据点数量有着时间和空间二次方.
5 t-SNE 实际上是做什么?
t-SNE 非线性降维算法通过基于具有多个特征的数据点的相似性识别观察到的簇来在数据中找到模式. 本质上是一种降维和可视化技术. 另外 t-SNE 的输出可以作为其他分类算法的输入特征.
6 用例
t-SNE 几乎可用于所有高维数据集, 广泛应用于图像处理, 自然语言处理, 基因组数据和语音处理. 实例有: 面部表情识别 [2], 识别肿瘤亚群[3], 使用 wordvec 进行文本比较[4] 等.
7 t-SNE 与其他降维算法相比
基于所实现的精度, 将 t-SNE 与 PCA 和其他线性降维模型相比, 结果表明 t-SNE 能够提供更好的结果. 这是因为算法定义了数据的局部和全局结构之间的软边界.
8 示例实现
在 MNIST 手写数字数据库上实现 t-SNE 算法.
1 R 语言
"Rtsne" 包在 R 中具有 t-SNE 的实现."Rtsne" 包可以使用在 R 控制台中键入的以下命令安装在 R 中:
MNIST 数据可从 MNIST 网站下载, 并可转换为具有少量代码的 csv 文件.
实现时间
可以看出, 与 PCA 相比, t-SNE 在相同样本大小的数据上执行需要相当长的时间.
解释结果
以下图用于探索性分析. 输出 x 和 y 坐标以及成本可以用作分类算法中的特征.
2 Python 语言
t-SNE 算法可以从 sklearn 包中访问.
超参数调整
代码
以下代码来自 sklearn 网站上的 sklearn 示例.
代码 1
实现时间
9 应用方面
9.1 数据科学家
对于数据科学家来说, 使用 t-SNE 的主要问题是算法的黑盒类型性质. 使用该算法的最佳方法是将其用于探索数据分析.
9.2 机器学习骇客
将数据集缩减为 2 或 3 维, 并使用非线性堆栈器将其堆叠. 可以使用 XGboost 提高 t-SNE 向量以获得更好的结果.
9.3 数据科学爱好者
对于开始使用数据科学的数据科学爱好者来说, 这种算法在研究和性能增强方面提供了最好的机会. 针对各种 NLP 问题和图像处理应用方面实施 t-SNE 的研究是一个尚未开发的领域.
10 常见错误
以下是在解释 t-SNE 的结果时要避免的几个常见错误:
1 为了使算法正确执行, 困惑度应小于点的数量. 一般设置为 5-50.
2 具有相同超参数的不同运行可能产生不同的结果.
3 任何 t-SNE 图中的簇大小不得用于标准偏差, 色散或任何其他类似的评估.
4 簇之间的距离可以改变. 一个茫然性不能优化所有簇的距离.
5 可以在随机噪声中找到模式.
6 不同的困惑水平可以观察到不同的簇形状.
7 不能基于单个 t-SNE 图进行分析拓扑, 在进行任何评估之前必须观察多个图.
本文由阿里云云栖社区组织翻译.
文章原标题 Comprehensive Guide on t-SNE algorithm with implementation in R & Python, 作者: Saurabh
来源: http://www.jianshu.com/p/8a2a69e66be7