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

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/datasets -.-> lab-49313{{"Reducción de dimensionalidad en Swiss Roll y Swiss-Hole"}} ml/sklearn -.-> lab-49313{{"Reducción de dimensionalidad en Swiss Roll y Swiss-Hole"}} end

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.