判別分析分類器の解説

Intermediate

This tutorial is from open-source community. Access the source code

はじめに

線形判別分析 (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 に質問してください。セッション終了後にフィードバックを提供していただければ、迅速に問題を解決します。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 81%です。学習者から 95% の好評価を得ています。

必要なライブラリをインポートする

まず、必要なライブラリをインポートする必要があります。これには、データの可視化に使用される 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 は教師付き次元削減にも使用できます。