【Python】機械学習のt-SNEで次元削減する方法を解説

  • URLをコピーしました!

今回は、機械学習における次元削減の手法のひとつである、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)

ここまで読んでくださりありがとうございます。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次