鸢尾花数据集上的支持向量机分类器

Beginner

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

简介

鸢尾花数据集是用于分类问题的经典数据集。在本实验中,我们将学习如何使用 Python 的 scikit-learn 在鸢尾花数据集中绘制不同的支持向量机(SVM)分类器。我们将在鸢尾花数据集的二维投影上比较不同的线性 SVM 分类器。

虚拟机提示

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

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

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

导入必要的库并加载数据集

import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.inspection import DecisionBoundaryDisplay

## 导入一些数据用于实验
iris = datasets.load_iris()
## 取前两个特征。我们可以通过使用二维数据集来避免这一步
X = iris.data[:, :2]
y = iris.target

创建支持向量机分类器并拟合数据

C = 1.0  ## 支持向量机正则化参数
models = (
    svm.SVC(kernel="linear", C=C),
    svm.LinearSVC(C=C, max_iter=10000, dual="auto"),
    svm.SVC(kernel="rbf", gamma=0.7, C=C),
    svm.SVC(kernel="poly", degree=3, gamma="auto", C=C),
)
models = (clf.fit(X, y) for clf in models)

绘制分类器的决策边界

## 设置 2x2 的绘图网格。
fig, sub = plt.subplots(2, 2)
plt.subplots_adjust(wspace=0.4, hspace=0.4)

X0, X1 = X[:, 0], X[:, 1]

## 为每个分类器创建一个 DecisionBoundaryDisplay
for clf, title, ax in zip(models, titles, sub.flatten()):
    disp = DecisionBoundaryDisplay.from_estimator(
        clf,
        X,
        response_method="predict",
        cmap=plt.cm.coolwarm,
        alpha=0.8,
        ax=ax,
        xlabel=iris.feature_names[0],
        ylabel=iris.feature_names[1],
    )
    ## 绘制数据点
    ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors="k")
    ax.set_xticks(())
    ax.set_yticks(())
    ax.set_title(title)

plt.show()

解释结果

上述代码将生成一个包含四个子图的绘图。每个子图展示了不同支持向量机(SVM)分类器的决策边界。每个子图的标题表明了该分类器中使用的支持向量机核的类型。数据点根据其目标类别进行颜色编码。

总结

在这个实验中,我们学习了如何使用 Python 的 scikit-learn 在鸢尾花数据集上绘制不同的支持向量机(SVM)分类器。我们在鸢尾花数据集的二维投影上比较了不同的线性支持向量机分类器,并对结果进行了解释。支持向量机分类器是解决分类问题的强大工具,可用于广泛的数据集。