支持向量机(Support Vector Machine,简称SVM)是一种常用的监督学习算法,它在机器学习领域被广泛用于分类和回归问题。SVM的核心思想是找到一个超平面,将不同类别的数据点尽可能地分开,从而实现分类。在本页面中,将通过一个简单的例子来展示如何使用Python中的scikit-learn库来实现SVM分类器,并绘制决策边界和支持向量。
首先,需要生成一个可分离的数据集。在这个例子中,将使用scikit-learn库中的make_blobs
函数来生成40个样本点,这些点被分为两个类别。
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=40, centers=2, random_state=6)
接下来,将创建一个SVM分类器,并使用线性核函数。在训练分类器之前,设置参数C=1000
来避免正则化,以便更清晰地展示分类效果。
from sklearn import svm
clf = svm.SVC(kernel="linear", C=1000)
clf.fit(X, y)
为了直观地展示分类效果,将绘制决策边界和支持向量。决策边界是分类器用来区分不同类别的边界,而支持向量是距离决策边界最近的样本点,它们对分类结果有重要影响。
import matplotlib.pyplot as plt
from sklearn.inspection import DecisionBoundaryDisplay
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对生成的数据集进行了分类,并绘制了决策边界和支持向量。这个过程展示了SVM在处理可分离数据集时的强大能力。在实际应用中,SVM可以处理更复杂的数据集,并且通过选择合适的核函数,可以解决非线性可分问题。
整个脚本的运行时间非常短,仅为0.066秒,这表明SVM分类器在处理这类小型数据集时具有很高的效率。
如果对SVM感兴趣,可以查看以下相关示例,这些示例涵盖了SVM在不同场景下的应用: