t-SNE を使った高次元データの可視化

Beginner

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

はじめに

t-SNE(t-Distributed Stochastic Neighbor Embedding)は、高次元データセットを可視化するために使用される次元削減技術です。このチュートリアルでは、Python の scikit-learn ライブラリを使用して t-SNE を使ってデータセットを可視化するプロセスを案内します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。私たちは迅速に問題を解決いたします。

ライブラリのインポート

このチュートリアルで必要なライブラリをインポートして始めましょう。

import numpy as np
import matplotlib.pyplot as plt

from matplotlib.ticker import NullFormatter
from sklearn import manifold, datasets
from time import time

データの作成

t-SNE の使用方法を示すために、3 つの異なるデータセットを作成します。最初のデータセットは、2 つの同心円です。

n_samples = 150
n_components = 2

X, y = datasets.make_circles(
    n_samples=n_samples, factor=0.5, noise=0.05, random_state=0
)

red = y == 0
green = y == 1

データの可視化

同心円のデータセットを散布図を使って可視化することができます。

ax = plt.subplot(1, 1, 1)
ax.scatter(X[red, 0], X[red, 1], c="r")
ax.scatter(X[green, 0], X[green, 1], c="g")
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

データに t-SNE を適用する

次に、同心円のデータセットに t-SNE を適用します。

t0 = time()
tsne = manifold.TSNE(
    n_components=n_components,
    init="random",
    random_state=0,
    perplexity=perplexity,
    n_iter=300,
)
Y = tsne.fit_transform(X)
t1 = time()

t-SNE の結果を可視化する

最後に、散布図を使って t-SNE の結果を可視化することができます。

ax = plt.subplot(1, 1, 1)
ax.scatter(Y[red, 0], Y[red, 1], c="r")
ax.scatter(Y[green, 0], Y[green, 1], c="g")
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
plt.axis("tight")

他のデータセットに対して繰り返す

S カーブや 2 次元の一様グリッドなど、他のデータセットに対しても、手順 2〜5 を繰り返すことができます。

まとめ

このチュートリアルでは、Python の scikit - learn ライブラリを使って高次元データセットを可視化するための t - SNE の使い方を段階的に説明しました。データの作成方法、データの可視化方法、データに t - SNE を適用する方法、および t - SNE の結果を可視化する方法を学びました。