简介
本实验将指导你使用带有径向基函数 (RBF) 内核的非线性支持向量机 (SVM) 执行二元分类的过程。要预测的目标是输入的异或 (XOR)。颜色图展示了支持向量机学习到的决策函数。我们将使用 Python 的 scikit-learn 库来完成此任务。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会立即为你解决问题。
导入所需库
在这一步中,我们将导入此任务所需的库。我们将使用 numpy 和 matplotlib 进行数据可视化,使用 scikit-learn 进行支持向量机分类。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
生成数据
在这一步中,我们将生成用于训练和测试支持向量机分类器的数据。我们将生成 300 个具有两个特征的随机数据点。要预测的目标是输入的异或(XOR)。
np.random.seed(0)
X = np.random.randn(300, 2)
Y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
训练模型
在这一步中,我们将使用生成的数据训练带有径向基函数(RBF)内核的支持向量机分类器。
clf = svm.NuSVC(gamma="auto")
clf.fit(X, Y)
可视化决策函数
在这一步中,我们将可视化支持向量机学习到的决策函数。我们将创建一个点的网格,并使用支持向量机分类器预测每个点的类别。然后,我们将绘制这些点及其各自的类别,以及支持向量机学习到的决策边界。
xx, yy = np.meshgrid(np.linspace(-3, 3, 500), np.linspace(-3, 3, 500))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.imshow(
Z,
interpolation="nearest",
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect="auto",
origin="lower",
cmap=plt.cm.PuOr_r,
)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2, linestyles="dashed")
plt.scatter(X[:, 0], X[:, 1], s=30, c=Y, cmap=plt.cm.Paired, edgecolors="k")
plt.xticks(())
plt.yticks(())
plt.axis([-3, 3, -3, 3])
plt.show()
总结
在这个实验中,我们学习了如何使用带有径向基函数(RBF)内核的非线性支持向量机进行二元分类。我们生成了具有两个特征和一个要预测的异或目标的数据。我们使用生成的数据训练了支持向量机分类器,并可视化了支持向量机学习到的决策函数。