LDA

2.6.3

LDA

最終更新 2020-02-26 読了時間 1 分
まとめ
  • LDA はクラス内分散を小さく、クラス間分散を大きくする射影軸を学習する教師あり次元削減である。
  • ラベル情報を使うため、分類前処理として有効に働く。
  • クラス数とサンプル数の関係、共分散の仮定が性能に影響する。

直感 #

LDAは『同じクラスは近く、異なるクラスは遠く』になる方向を探す方法です。分散が大きい軸を探すPCAと異なり、分類しやすさを直接目的にしている点が重要です。

詳細な解説 #


1. 直感:クラスを分けやすい方向を探す #

  • PCA:データの「ばらつき」が大きい方向を探す(ラベルなし)。
  • LDA:クラス間の距離が大きく、クラス内のばらつきが小さくなる方向を探す(ラベルあり)。

2. 数式でみる LDA #

クラス \(C_1, C_2, \dots, C_k\) があるとき:

  1. クラス内散布行列(within-class scatter): $$ S_W = \sum_{j=1}^k \sum_{x_i \in C_j} (x_i - \mu_j)(x_i - \mu_j)^\top $$

    • 各クラス内のばらつき。
  2. クラス間散布行列(between-class scatter): $$ S_B = \sum_{j=1}^k n_j (\mu_j - \mu)(\mu_j - \mu)^\top $$

    • クラス平均 \(\mu_j\) と全体平均 \(\mu\) の差。
  3. 目的
    射影ベクトル \(w\) を求め、次を最大化: $$ J(w) = \frac{w^\top S_B w}{w^\top S_W w} $$ これは「クラス間の分離を大きくし、クラス内のばらつきを小さくする」基準。


3. 実験用のデータ #

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_blobs

X, y = make_blobs(
    n_samples=600, n_features=3, random_state=11711, cluster_std=4, centers=3
)

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection="3d")
ax.scatter(X[:, 0], X[:, 1], X[:, 2], marker="o", c=y)
ax.set_xlabel("$x_1$")
ax.set_ylabel("$x_2$")
ax.set_zlabel("$x_3$")

実験用のデータの図


4. LDAで二次元に次元削減 #

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

lda = LDA(n_components=2).fit(X, y)
X_lda = lda.transform(X)

plt.figure(figsize=(8, 8))
plt.scatter(X_lda[:, 0], X_lda[:, 1], c=y, alpha=0.5)
plt.xlabel("LD1")
plt.ylabel("LD2")
plt.title("LDAによる2次元化")
plt.show()

LDAで二次元に次元削減の図


5. PCAとLDAの比較 #

同じデータをPCAで2次元化した場合:

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

plt.figure(figsize=(8, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, alpha=0.5)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("PCAによる2次元化")
plt.show()

同じデータをPCAで2次元化した場合:の図

PCAは「ばらつき最大化」、LDAは「クラス分離最大化」という違いがある。


6. 実務での応用 #

  • 次元削減:分類問題の前処理として。
  • 可視化:高次元データを2次元に落としてラベルごとにプロット。
  • 顔認識(Fisherfaces):PCAとLDAを組み合わせた手法が有名。

発展:LDAの制約 #

  • LDAの最大次元は「クラス数 - 1」。
    (例:3クラスなら最大2次元までしか落とせない)
  • クラス分布が「ガウス分布で共分散が等しい」と仮定。
  • 多クラス拡張も可能だが、サンプル数が少ない場合は不安定になりやすい。