判别分析分类器解析

Machine LearningMachine LearningBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

线性判别分析(LDA)和二次判别分析(QDA)是机器学习中使用的两种经典分类器。LDA 使用线性决策面,而 QDA 使用二次决策面。这些分类器很受欢迎,因为它们具有闭式解,在实践中效果良好,并且没有超参数需要调整。

在本实验中,我们将探索如何使用 scikit-learn(Python 中一个流行的机器学习库)来执行 LDA 和 QDA。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/discriminant_analysis("Discriminant Analysis") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/discriminant_analysis -.-> lab-71094{{"判别分析分类器解析"}} sklearn/datasets -.-> lab-71094{{"判别分析分类器解析"}} ml/sklearn -.-> lab-71094{{"判别分析分类器解析"}} end

导入所需的库

首先,我们需要导入所需的库,包括用于数据可视化的 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 函数来创建具有不同模式的两个类别。

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, '线性判别分析')

plt.subplot(1, 2, 2)
plot_decision_boundary(qda, '二次判别分析')

plt.tight_layout()
plt.show()

使用 LDA 进行降维

LDA 还可用于有监督的降维。我们将通过降低鸢尾花数据集的维度来演示这一点。

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)

总结

线性判别分析和二次判别分析(LDA 和 QDA)是机器学习中使用的两种经典分类器。LDA 使用线性决策面,而 QDA 使用二次决策面。这些分类器具有闭式解,并且在实际应用中表现良好。LDA 还可用于有监督的降维。