Redução de Dimensionalidade em Dados Swiss Roll e Swiss-Hole

Beginner

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

Introdução

Este laboratório compara duas técnicas populares de redução de dimensionalidade não linear, Locally Linear Embedding (LLE) e T-distributed Stochastic Neighbor Embedding (t-SNE), no conjunto de dados clássico Swiss Roll. Exploraremos como ambos lidam com a adição de um buraco nos dados.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Gerar o Conjunto de Dados Swiss Roll

Começamos gerando o conjunto de dados Swiss Roll usando a função make_swiss_roll() de sklearn.datasets. Esta função gera um conjunto de dados 3D com forma de 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 o Conjunto de Dados Swiss Roll

Podemos visualizar o conjunto de dados Swiss Roll gerado usando um gráfico de dispersão 3D, com cores diferentes representando pontos diferentes.

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 no Espaço Ambiental")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

Calcular as Embeddings LLE e t-SNE do Conjunto de Dados Swiss Roll

Calculamos as embeddings LLE e t-SNE do conjunto de dados Swiss Roll usando as funções manifold.locally_linear_embedding() e manifold.TSNE(), respectivamente, de 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)

Visualizar as Embeddings LLE e t-SNE do Conjunto de Dados Swiss Roll

Podemos visualizar as embeddings LLE e t-SNE do conjunto de dados Swiss Roll usando gráficos de dispersão, com cores diferentes representando pontos diferentes.

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

Gerar o Conjunto de Dados Swiss-Hole

Geramos o conjunto de dados Swiss-Hole adicionando um buraco ao conjunto de dados Swiss Roll usando o parâmetro hole=True na função make_swiss_roll().

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

Visualizar o Conjunto de Dados Swiss-Hole

Podemos visualizar o conjunto de dados Swiss-Hole gerado usando um gráfico de dispersão 3D, com cores diferentes representando pontos diferentes.

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 no Espaço Ambiental")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

Calcular Embeddings LLE e t-SNE do Conjunto de Dados Swiss-Hole

Calculamos os embeddings LLE e t-SNE do conjunto de dados Swiss-Hole usando as funções manifold.locally_linear_embedding() e manifold.TSNE() da biblioteca 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 os Embeddings LLE e t-SNE do Conjunto de Dados Swiss-Hole

Podemos visualizar os embeddings LLE e t-SNE do conjunto de dados Swiss-Hole usando gráficos de dispersão, com cores diferentes representando pontos diferentes.

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

Resumo

Este laboratório comparou os embeddings LLE e t-SNE do conjunto de dados clássico Swiss Roll e do conjunto de dados Swiss-Hole. Visualizamos os conjuntos de dados e seus embeddings usando gráficos de dispersão. Observamos que o LLE foi capaz de desenrolar eficazmente os conjuntos de dados Swiss Roll e Swiss-Hole, enquanto o t-SNE preservou a estrutura geral dos dados, mas tendeu a aglomerar seções de pontos.