はじめに
主成分分析 (Principal Components Analysis: PCA) は、データを簡素化するために使用される統計手法です。これは、データにおける最も重要な特徴やパターンを見つける線形変換手法です。PCA は、次元削減、データ圧縮、特徴抽出のために、データ分析や機械学習において広く使用されています。この実験では、Python の scikit-learn ライブラリを使用して、データセットに対して PCA を実行し、結果を可視化します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション終了後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
この実験に必要なライブラリをインポートして始めましょう。数値演算には numpy を、可視化には matplotlib を、PCA には scikit-learn を使用します。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
データの作成
この実験用にランダムなデータセットを生成します。データセットには、3 つの変数 x、y、および z があります。x と y を平均 0、標準偏差 0.5 の正規分布に従うランダムな変数として定義します。z も平均 0、標準偏差 0.1 の正規分布に従います。
e = np.exp(1)
np.random.seed(4)
y = np.random.normal(scale=0.5, size=(30000))
x = np.random.normal(scale=0.5, size=(30000))
z = np.random.normal(scale=0.1, size=len(x))
PCA を実行する
次に、データセットに対して PCA を実行します。まず、x、y、および z を連結して 3 次元配列 Y を形成します。次に、PCA クラスのインスタンスを作成し、データに適合させます。その後、PCA オブジェクトの components_ 属性を使用して主成分にアクセスできます。
Y = np.c_[x, y, z]
pca = PCA(n_components=3)
pca.fit(Y)
components = pca.components_
PCA の結果を可視化する
主成分をプロットすることで、PCA の結果を可視化できます。データの 3D 散布図を作成し、各点をその密度に基づいて色分けします。その後、最初の 2 つの主成分を平面としてプロットします。このプロセスをデータの 2 つの異なるビューに対して繰り返します。
fig = plt.figure(figsize=(10, 5))
## 最初のビュー
ax = fig.add_subplot(121, projection="3d", elev=-40, azim=-80)
ax.set_title("ビュー 1")
## データをプロットする
density = np.exp(-(x ** 2 + y ** 2))
ax.scatter(x, y, z, c=density, cmap="plasma", marker="+", alpha=0.4)
## 主成分をプロットする
v1 = components[:, 0]
v2 = components[:, 1]
x_pca_plane = np.array([v1[0], -v1[0], -v1[0], v1[0]])
y_pca_plane = np.array([v1[1], -v1[1], -v1[1], v1[1]])
z_pca_plane = np.array([v1[2], -v1[2], v1[2], v1[2]])
ax.plot_surface(x_pca_plane, y_pca_plane, z_pca_plane, alpha=0.2)
## 2 番目のビュー
ax = fig.add_subplot(122, projection="3d", elev=30, azim=20)
ax.set_title("ビュー 2")
## データをプロットする
density = np.exp(-(x ** 2 + y ** 2))
ax.scatter(x, y, z, c=density, cmap="plasma", marker="+", alpha=0.4)
## 主成分をプロットする
v1 = components[:, 0]
v2 = components[:, 1]
x_pca_plane = np.array([v1[0], -v1[0], -v1[0], v1[0]])
y_pca_plane = np.array([v1[1], -v1[1], -v1[1], v1[1]])
z_pca_plane = np.array([v1[2], -v1[2], v1[2], v1[2]])
ax.plot_surface(x_pca_plane, y_pca_plane, z_pca_plane, alpha=0.2)
plt.show()
まとめ
この実験では、Python の scikit-learn ライブラリを使ってデータセットに対して PCA を実行する方法を学びました。3 つの変数を持つランダムなデータセットを生成し、PCA を実行し、結果を可視化しました。3D 散布図でデータをプロットし、最初の 2 つの主成分に対する平面を追加しました。PCA は、データの次元数を削減し、最も重要なパターンや特徴を見つけるための強力な手法です。