简介
线性判别分析(LDA)和二次判别分析(QDA)是机器学习中使用的两种经典分类器。LDA 使用线性决策面,而 QDA 使用二次决策面。这些分类器很受欢迎,因为它们具有闭式解,在实践中效果良好,并且没有超参数需要调整。
在本实验中,我们将探索如何使用 scikit-learn(Python 中一个流行的机器学习库)来执行 LDA 和 QDA。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 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 函数来创建具有不同模式的两个类别。
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 还可用于有监督的降维。