Снижение размерности Swiss Roll и Swiss-Hole

Beginner

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

Введение

В этом лабораторном задании сравниваются две популярные нелинейные методы понижения размерности: Locally Linear Embedding (LLE) и T-distributed Stochastic Neighbor Embedding (t-SNE) на классическом наборе данных Swiss Roll. Мы исследуем, как они обрабатывают добавление отверстия в данные.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами при обучении, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Создание набора данных Swiss Roll

Начнем с создания набора данных Swiss Roll с использованием функции make_swiss_roll() из sklearn.datasets. Эта функция создает трехмерный набор данных в виде спиральной формы.

import matplotlib.pyplot as plt
from sklearn import manifold, datasets

sr_points, sr_color = datasets.make_swiss_roll(n_samples=1500, random_state=0)

Визуализация набора данных Swiss Roll

Можем визуализировать сгенерированный набор данных Swiss Roll с использованием трехмерной точечной диаграммы, где разные цвета представляют разные точки.

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")
fig.add_axes(ax)
ax.scatter(sr_points[:, 0], sr_points[:, 1], sr_points[:, 2], c=sr_color, s=50, alpha=0.8)
ax.set_title("Swiss Roll в окружающем пространстве")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

Вычисление эмбеддингов LLE и t-SNE для набора данных Swiss Roll

Мы вычисляем эмбеддинги LLE и t-SNE для набора данных Swiss Roll с использованием функций manifold.locally_linear_embedding() и manifold.TSNE() из sklearn соответственно.

sr_lle, sr_err = manifold.locally_linear_embedding(sr_points, n_neighbors=12, n_components=2)

sr_tsne = manifold.TSNE(n_components=2, perplexity=40, random_state=0).fit_transform(sr_points)

Визуализация эмбеддингов LLE и t-SNE для набора данных Swiss Roll

Можем визуализировать эмбеддинги LLE и t-SNE для набора данных Swiss Roll с использованием точечных диаграмм, где разные цвета представляют разные точки.

fig, axs = plt.subplots(figsize=(8, 8), nrows=2)
axs[0].scatter(sr_lle[:, 0], sr_lle[:, 1], c=sr_color)
axs[0].set_title("Эмбеддинг LLE для Swiss Roll")
axs[1].scatter(sr_tsne[:, 0], sr_tsne[:, 1], c=sr_color)
_ = axs[1].set_title("Эмбеддинг t-SNE для Swiss Roll")

Создание набора данных Swiss-Hole

Мы создаем набор данных Swiss-Hole, добавив отверстие в набор данных Swiss Roll с использованием параметра hole=True в функции make_swiss_roll().

sh_points, sh_color = datasets.make_swiss_roll(n_samples=1500, hole=True, random_state=0)

Визуализация набора данных Swiss-Hole

Можем визуализировать сгенерированный набор данных Swiss-Hole с использованием трехмерной точечной диаграммы, где разные цвета представляют разные точки.

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")
fig.add_axes(ax)
ax.scatter(sh_points[:, 0], sh_points[:, 1], sh_points[:, 2], c=sh_color, s=50, alpha=0.8)
ax.set_title("Swiss-Hole в окружающем пространстве")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

Вычисление эмбеддингов LLE и t-SNE для набора данных Swiss-Hole

Мы вычисляем эмбеддинги LLE и t-SNE для набора данных Swiss-Hole с использованием функций manifold.locally_linear_embedding() и manifold.TSNE() из sklearn соответственно.

sh_lle, sh_err = manifold.locally_linear_embedding(sh_points, n_neighbors=12, n_components=2)

sh_tsne = manifold.TSNE(n_components=2, perplexity=40, init="random", random_state=0).fit_transform(sh_points)

Визуализация эмбеддингов LLE и t-SNE для набора данных Swiss-Hole

Можем визуализировать эмбеддинги LLE и t-SNE для набора данных Swiss-Hole с использованием точечных диаграмм, где разные цвета представляют разные точки.

fig, axs = plt.subplots(figsize=(8, 8), nrows=2)
axs[0].scatter(sh_lle[:, 0], sh_lle[:, 1], c=sh_color)
axs[0].set_title("Эмбеддинг LLE для Swiss-Hole")
axs[1].scatter(sh_tsne[:, 0], sh_tsne[:, 1], c=sh_color)
_ = axs[1].set_title("Эмбеддинг t-SNE для Swiss-Hole")

Резюме

В этом лабораторном задании сравнивались эмбеддинги LLE и t-SNE для классического набора данных Swiss Roll и набора данных Swiss-Hole. Мы визуализировали наборы данных и их эмбеддинги с использованием точечных диаграмм. Мы наблюдали, что LLE способен эффективно развернуть наборы данных Swiss Roll и Swiss-Hole, в то время как t-SNE сохраняет общую структуру данных, но имеет тенденцию к скоплению отдельных групп точек.