Reducción de dimensionalidad en Swiss Roll y Swiss-Hole

Beginner

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

Introducción

Esta práctica compara dos técnicas populares de dimensionalidad no lineal, Embedding Lineal Local (LLE, por sus siglas en inglés) y Embedding Estocástico Vecino T-Distribuido (t-SNE), en el clásico conjunto de datos Swiss Roll. Exploraremos cómo ambas se enfrentan a la adición de un agujero en los datos.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar algunos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Generar el conjunto de datos Swiss Roll

Comenzamos generando el conjunto de datos Swiss Roll utilizando la función make_swiss_roll() de sklearn.datasets. Esta función genera un conjunto de datos tridimensional con una forma en espiral.

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

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

Visualizar el conjunto de datos Swiss Roll

Podemos visualizar el conjunto de datos Swiss Roll generado utilizando un diagrama de dispersión tridimensional con diferentes colores que representan diferentes puntos.

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 en el espacio ambiental")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

Calcular las proyecciones LLE y t-SNE del conjunto de datos Swiss Roll

Calculamos las proyecciones LLE y t-SNE del conjunto de datos Swiss Roll utilizando las funciones manifold.locally_linear_embedding() y manifold.TSNE() de sklearn, respectivamente.

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)

Visualizar las proyecciones LLE y t-SNE del conjunto de datos Swiss Roll

Podemos visualizar las proyecciones LLE y t-SNE del conjunto de datos Swiss Roll utilizando diagramas de dispersión con diferentes colores que representan diferentes puntos.

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("Proyección LLE de Swiss Roll")
axs[1].scatter(sr_tsne[:, 0], sr_tsne[:, 1], c=sr_color)
_ = axs[1].set_title("Proyección t-SNE de Swiss Roll")

Generar el conjunto de datos Swiss-Hole

Generamos el conjunto de datos Swiss-Hole agregando un agujero al conjunto de datos Swiss Roll utilizando el parámetro hole=True en la función make_swiss_roll().

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

Visualizar el conjunto de datos Swiss-Hole

Podemos visualizar el conjunto de datos Swiss-Hole generado utilizando un diagrama de dispersión tridimensional con diferentes colores que representan diferentes puntos.

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 en el espacio ambiental")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

Calcular las proyecciones LLE y t-SNE del conjunto de datos Swiss-Hole

Calculamos las proyecciones LLE y t-SNE del conjunto de datos Swiss-Hole utilizando las funciones manifold.locally_linear_embedding() y manifold.TSNE() de sklearn, respectivamente.

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)

Visualizar las proyecciones LLE y t-SNE del conjunto de datos Swiss-Hole

Podemos visualizar las proyecciones LLE y t-SNE del conjunto de datos Swiss-Hole utilizando diagramas de dispersión con diferentes colores que representan diferentes puntos.

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("Proyección LLE de Swiss-Hole")
axs[1].scatter(sh_tsne[:, 0], sh_tsne[:, 1], c=sh_color)
_ = axs[1].set_title("Proyección t-SNE de Swiss-Hole")

Resumen

Esta práctica comparó las proyecciones LLE y t-SNE del clásico conjunto de datos Swiss Roll y del conjunto de datos Swiss-Hole. Visualizamos los conjuntos de datos y sus proyecciones utilizando diagramas de dispersión. Observamos que LLE fue capaz de desenrollar efectivamente los conjuntos de datos Swiss Roll y Swiss-Hole, mientras que t-SNE preservó la estructura general de los datos pero tendía a agrupar secciones de puntos juntos.