はじめに
線形判別分析 (Linear Discriminant Analysis, LDA) と二次判別分析 (Quadratic Discriminant Analysis, QDA) は、機械学習で使用される 2 つの古典的な分類器です。LDA は線形の決定面を使用し、QDA は二次の決定面を使用します。これらの分類器は、閉形式の解があり、実際の運用でも良好な結果を得られ、調整するハイパーパラメータがないため、人気があります。
この実験では、Python で人気のある機械学習ライブラリである scikit-learn を使用して、LDA と QDA を実行する方法を探ります。
VM のヒント
VM の起動が完了したら、左上隅をクリックして Notebook タブに切り替え、Jupyter Notebook にアクセスして練習を行ってください。
場合によっては、Jupyter Notebook の読み込みが完了するまで数秒待つ必要があることがあります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby に質問してください。セッション終了後にフィードバックを提供していただければ、迅速に問題を解決します。
必要なライブラリをインポートする
まず、必要なライブラリをインポートする必要があります。これには、データの可視化に使用される scikit-learn (sklearn) と matplotlib が含まれます。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
合成データを生成する
次に、LDA と QDA の違いを示すために合成データを生成します。scikit-learn の make_classification 関数を使用して、異なるパターンを持つ 2 つのクラスを作成します。
from sklearn.datasets import make_classification
## Generate synthetic data
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=1)
分類器を訓練して可視化する
ここでは、合成データを使って LDA と QDA の分類器を訓練し、決定境界を可視化します。
## Train the LDA classifier
lda = LinearDiscriminantAnalysis()
lda.fit(X, y)
## Train the QDA classifier
qda = QuadraticDiscriminantAnalysis()
qda.fit(X, y)
## Plot the decision boundaries
def plot_decision_boundary(classifier, title):
h = 0.02 ## step size in the mesh
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = classifier.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title(title)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plot_decision_boundary(lda, 'Linear Discriminant Analysis')
plt.subplot(1, 2, 2)
plot_decision_boundary(qda, 'Quadratic Discriminant Analysis')
plt.tight_layout()
plt.show()
LDA を使用した次元削減を行う
LDA は教師付き次元削減にも使用できます。ここでは、アヤメ (Iris) データセットの次元を削減することでそれを実証します。
from sklearn.datasets import load_iris
## Load the Iris dataset
iris = load_iris()
X, y = iris.data, iris.target
## Perform dimensionality reduction using LDA
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)
まとめ
線形判別分析 (Linear Discriminant Analysis, LDA) と二次判別分析 (Quadratic Discriminant Analysis, QDA) は、機械学習で使用される 2 つの古典的な分類器です。LDA は線形の決定面を使用し、QDA は二次の決定面を使用します。これらの分類器は閉形式の解を持ち、実際の使用でも良好な性能を発揮します。また、LDA は教師付き次元削減にも使用できます。