支持向量机:最大间隔分离超平面

Beginner

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

简介

在本实验中,我们将使用 scikit-learn 创建一个两类可分离数据集,并使用具有线性核的支持向量机(SVM)分类器绘制最大间隔分离超平面。SVM 是一种强大的分类算法,它能找到最佳边界或超平面,将数据分为不同类别,同时最大化类间间隔。

VM 提示

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

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

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

创建一个两类可分离数据集

为了创建一个两类可分离数据集,我们将使用 scikit-learn 中的make_blobs()函数。此函数生成用于聚类和分类的各向同性高斯数据点集。我们将创建 40 个样本,有两个中心点,并设置随机种子为 6。我们还将使用matplotlib绘制数据点。

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

## 创建一个两类可分离数据集
X, y = make_blobs(n_samples=40, centers=2, random_state=6)

## 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.show()

拟合 SVM 模型

接下来,我们将使用线性核和正则化参数 1000 将 SVM 模型拟合到我们的数据集上。我们将使用 scikit-learn 中的svm.SVC()函数来创建 SVM 分类器。

from sklearn import svm

## 拟合 SVM 模型
clf = svm.SVC(kernel="linear", C=1000)
clf.fit(X, y)

绘制最大间隔分离超平面

为了绘制最大间隔分离超平面,我们将使用 scikit-learn 中的DecisionBoundaryDisplay.from_estimator()函数。此函数绘制 SVM 分类器的决策函数和支持向量。我们还将把支持向量绘制为没有填充、只有黑色边缘的圆圈。

from sklearn.inspection import DecisionBoundaryDisplay

## 绘制决策函数和支持向量
ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    plot_method="contour",
    colors="k",
    levels=[-1, 0, 1],
    alpha=0.5,
    linestyles=["--", "-", "--"],
    ax=ax,
)
ax.scatter(
    clf.support_vectors_[:, 0],
    clf.support_vectors_[:, 1],
    s=100,
    linewidth=1,
    facecolors="none",
    edgecolors="k",
)
plt.show()

总结

在本实验中,我们学习了如何创建一个两类可分离数据集,使用线性核拟合 SVM 模型,并使用 scikit-learn 绘制最大间隔分离超平面。支持向量机(SVM)是一种强大的分类算法,可用于多种应用,包括图像分类、文本分类和生物信息学。