使用 t-SNE 可视化高维数据

Beginner

This tutorial is from open-source community. Access the source code

简介

t-SNE(t-分布随机邻域嵌入)是一种用于可视化高维数据集的降维技术。本教程将指导你使用 Python 的 scikit-learn 库,通过 t-SNE 来可视化数据集的过程。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到笔记本标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入库

我们首先导入本教程所需的库。

import numpy as np
import matplotlib.pyplot as plt

from matplotlib.ticker import NullFormatter
from sklearn import manifold, datasets
from time import time

创建数据

我们将创建三个不同的数据集来说明 t-SNE 的用法。第一个数据集将是两个同心圆。

n_samples = 150
n_components = 2

X, y = datasets.make_circles(
    n_samples=n_samples, factor=0.5, noise=0.05, random_state=0
)

red = y == 0
green = y == 1

可视化数据

我们可以使用散点图来可视化同心圆数据集。

ax = plt.subplot(1, 1, 1)
ax.scatter(X[red, 0], X[red, 1], c="r")
ax.scatter(X[green, 0], X[green, 1], c="g")
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

将 t-SNE 应用于数据

接下来,我们将把 t-SNE 应用于同心圆数据集。

t0 = time()
tsne = manifold.TSNE(
    n_components=n_components,
    init="random",
    random_state=0,
    perplexity=perplexity,
    n_iter=300,
)
Y = tsne.fit_transform(X)
t1 = time()

可视化 t-SNE 结果

最后,我们可以使用散点图来可视化 t-SNE 的结果。

ax = plt.subplot(1, 1, 1)
ax.scatter(Y[red, 0], Y[red, 1], c="r")
ax.scatter(Y[green, 0], Y[green, 1], c="g")
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

对其他数据集重复上述步骤

我们可以对其他数据集重复步骤 2 - 5,比如 S 曲线和二维均匀网格。

总结

本教程提供了一份使用 Python 的 scikit-learn 库,通过 t-SNE 可视化高维数据集的分步指南。我们学习了如何创建数据、可视化数据、将 t-SNE 应用于数据以及可视化 t-SNE 的结果。