简介
在本实验中,我们将使用 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)是一种强大的分类算法,可用于多种应用,包括图像分类、文本分类和生物信息学。