今回は、機械学習における次元削減の手法のひとつである、t-SNEについて解説します。
t-SNEの特徴、Pythonを使用し、t-SNEを実装する方法を紹介していきます。
動画で詳しく学習したい方はこちらもおすすめ
次元削減とは
次元削減とは、高次元データの特徴量を減らすことで解析を簡素化する手法です。
次元削減をすることで、計算コストの低減、データの可視化が可能です。

次元削減の代表的な手法
次元削減の代表的な手法は以下の通りです。
- PCA(主成分分析)
- t-SNE
- NMF(非負値行列因子分解)
今回は、上記の手法からt-SNEについて説明していきます。
t-SNEとは
t-SNE (t-Distributed Stochastic Neighbor Embedding)はデータ間の距離を求め、確率により、データ間の距離を保ちつつ次元削減をします。
データ間の関係性を維持するので、可視化に特化したアルゴリズムです。
t-SNEの特徴
t-SNEのメリット・デメリットは以下の通りです。
メリット
- 可視化に適している
- 局所的な構造を保持
デメリット
- 計算コストが高い
- パラメータ依存
Python実践 t-SNE
それではPythonを使用し、t-SNEを実装してみましょう!
scikit-learn
ライブラリを使用します。
使い方は以下の通りです。
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
n_components
で次元削減後の次元数を指定します。上記では2次元データに次元削除した例です。
fit_transform
で構築したt-SNEのモデルをデータX
に適応します。
サンプルコードは以下の通りです。
from sklearn.manifold import TSNE
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# make_blobsで3Dデータを生成
X, y = make_blobs(n_samples=300, centers=4, n_features=3, random_state=42)
# t-SNEの適用 (3D -> 2D)
tsne = TSNE(n_components=2, random_state=42)
X_2D = tsne.fit_transform(X)
# 3Dデータのプロット
fig = plt.figure(figsize=(16, 6))
ax1 = fig.add_subplot(121, projection='3d')
scatter = ax1.scatter(X_3D[:, 0], X_3D[:, 1], X_3D[:, 2], c=y, cmap='viridis', alpha=0.7)
ax1.set_title("Original 3D Data")
ax1.set_xlabel("Feature 1")
ax1.set_ylabel("Feature 2")
ax1.set_zlabel("Feature 3")
# 次元削減後の2Dデータのプロット
ax2 = fig.add_subplot(122)
scatter_2d = ax2.scatter(X_2D[:, 0], X_2D[:, 1], c=y, cmap='viridis', alpha=0.7)
ax2.set_title("t-SNE Visualization (2D)")
ax2.set_xlabel("Feature 1")
ax2.set_ylabel("Feature 2")
plt.show()
実行結果

3次元のデータを2次元に変換しています。
まとめ
機械学習における次元削減の手法のひとつである、t-SNEを紹介しました。
t-SNEは、データ間の関係性を維持しながら次元削減を行い、可視化に特化したアルゴリズムです。
t-SNEをPythonで実装する方法は以下の通りです。
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
ここまで読んでくださりありがとうございます。