스위스 롤 및 스위스 홀 차원 축소

Beginner

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

소개

이 실험은 고전적인 스위스 롤 데이터셋에서 두 가지 인기 있는 비선형 차원 축소 기법, Locally Linear Embedding (LLE) 와 T-distributed Stochastic Neighbor Embedding (t-SNE) 를 비교합니다. 데이터에 구멍이 추가되었을 때 이 두 기법이 어떻게 대처하는지 살펴볼 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

스위스 롤 데이터셋 생성

sklearn.datasetsmake_swiss_roll() 함수를 사용하여 스위스 롤 데이터셋을 생성합니다. 이 함수는 나선형 모양의 3 차원 데이터셋을 생성합니다.

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

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

스위스 롤 데이터셋 시각화

다양한 색상으로 서로 다른 점을 표현하는 3 차원 산점도를 사용하여 생성된 스위스 롤 데이터셋을 시각화할 수 있습니다.

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("스위스 롤 (원래 공간)")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

스위스 롤 데이터셋의 LLE 및 t-SNE 임베딩 계산

sklearnmanifold.locally_linear_embedding()manifold.TSNE() 함수를 사용하여 스위스 롤 데이터셋의 LLE 및 t-SNE 임베딩을 계산합니다.

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 임베딩 시각화

다양한 색상으로 서로 다른 점을 표현하는 산점도를 사용하여 스위스 롤 데이터셋의 LLE 및 t-SNE 임베딩을 시각화할 수 있습니다.

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)")

스위스 홀 데이터셋 생성

make_swiss_roll() 함수의 hole=True 매개변수를 사용하여 스위스 롤 데이터셋에 구멍을 추가하여 스위스 홀 데이터셋을 생성합니다.

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

스위스 홀 데이터셋 시각화

생성된 스위스 홀 데이터셋을 3 차원 산점도로 시각화하여 서로 다른 점을 나타낼 수 있습니다.

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("스위스 홀 (Ambient Space)")
ax.view_init(azim=-66, elev=12)
_ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

스위스 홀 데이터셋의 LLE 및 t-SNE 임베딩 계산

sklearnmanifold.locally_linear_embedding()manifold.TSNE() 함수를 사용하여 스위스 홀 데이터셋의 LLE 및 t-SNE 임베딩을 계산합니다.

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 임베딩 시각화

스위스 홀 데이터셋의 LLE 및 t-SNE 임베딩을 산점도로 시각화하여 서로 다른 점을 다른 색상으로 표현할 수 있습니다.

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 임베딩")
axs[1].scatter(sh_tsne[:, 0], sh_tsne[:, 1], c=sh_color)
_ = axs[1].set_title("스위스 홀의 t-SNE 임베딩")

요약

이 실험에서는 클래식 스위스 롤 데이터셋과 스위스 홀 데이터셋의 LLE 및 t-SNE 임베딩을 비교했습니다. 데이터셋과 그 임베딩을 산점도를 사용하여 시각화했습니다. LLE 는 스위스 롤과 스위스 홀 데이터셋을 효과적으로 펼치는 데 성공했으며, t-SNE 는 데이터의 일반적인 구조를 보존했지만, 점들의 일부 구간을 뭉치게 하는 경향이 있었습니다.