支持向量机(SVM)是一种强大的分类算法,它通过寻找一个最大化两个类别之间边界的超平面来区分数据。在本例中,将使用Python的scikit-learn库来演示如何使用SVM分类器和线性核在一个两类别可分离的数据集中绘制最大边界超平面。
首先,需要生成一些可分离的数据点。使用scikit-learn的make_blobs
函数来创建40个样本点,这些点被分成两个中心。然后,使用SVM的线性核来拟合这些数据,并且为了演示目的,不进行正则化。
接下来,将绘制这些数据点,并使用DecisionBoundaryDisplay
类来绘制决策边界。这个边界就是SVM找到的最大边界超平面。此外,还会突出显示支持向量,即那些对定义决策边界有贡献的数据点。
以下是实现这一过程的Python代码:
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
from sklearn.inspection import DecisionBoundaryDisplay
# 创建40个可分离的点
X, y = make_blobs(n_samples=40, centers=2, random_state=6)
# 拟合模型,这里不进行正则化以便于演示
clf = svm.SVC(kernel="linear", C=1000)
clf.fit(X, y)
# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
# 绘制决策边界
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模型。接着,它使用matplotlib绘制了数据点和决策边界,并突出显示了支持向量。最后,它显示了整个图形。
通过这个示例,可以看到SVM如何有效地在数据中找到最大边界超平面,从而实现类别的分离。这种方法在许多机器学习任务中都非常有用,尤其是在需要进行复杂分类的情况下。
整个脚本的运行时间非常短,仅为0.074秒,这展示了使用scikit-learn进行机器学习任务的高效性。可以通过下载Jupyter notebook或Python源代码来进一步探索这个示例。