支持向量机(SVM)核函数练习

本教程是一个关于如何使用不同的支持向量机(SVM)核函数的练习。这个练习是监督学习教程部分中的一个环节,旨在帮助学习者理解并掌握SVM核函数在实际问题中的应用。为scikit-learn开发者团队,遵循BSD-3-Clause许可证。

首先,需要导入必要的库,包括matplotlib用于绘图,numpy用于数学运算,以及sklearn中的datasets和svm模块。接着,加载了著名的鸢尾花数据集,并对其进行了预处理,只保留了两个类别的数据,以便于在二维平面上进行可视化。

import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, svm iris = datasets.load_iris() X = iris.data y = iris.target X = X[y != 0, :2] y = y[y != 0]

接下来,设置了随机种子,以确保结果的可重复性。然后,对数据进行了随机打乱,并按照90%的比例划分了训练集和测试集。

n_sample = len(X) np.random.seed(0) order = np.random.permutation(n_sample) X = X[order] y = y[order].astype(float) X_train = X[:int(0.9 * n_sample)] y_train = y[:int(0.9 * n_sample)] X_test = X[int(0.9 * n_sample):] y_test = y[int(0.9 * n_sample):]

在模型训练阶段,尝试了三种不同的核函数:线性核、径向基函数核(RBF)和多项式核。对于每种核函数,都创建了一个SVC模型,并使用训练数据对其进行了训练。然后,使用训练好的模型对测试数据进行了预测,并在二维平面上绘制了决策边界

for kernel in ("linear", "rbf", "poly"): clf = svm.SVC(kernel=kernel, gamma=10) clf.fit(X_train, y_train) plt.figure() plt.clf() plt.scatter(X[:, 0], X[:, 1], c=y, zorder=10, cmap=plt.cm.Paired, edgecolor="k", s=20) plt.scatter(X_test[:, 0], X_test[:, 1], s=80, facecolors="none", zorder=10, edgecolor="k") plt.axis("tight") x_min = X[:, 0].min() x_max = X[:, 0].max() y_min = X[:, 1].min() y_max = X[:, 1].max() XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j] Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()]) Z = Z.reshape(XX.shape) plt.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired) plt.contour(XX, YY, Z, colors=["k", "k", "k"], linestyles=["--", "-", "--"], levels=[-0.5, 0, 0.5]) plt.title(kernel) plt.show()

通过上述代码,可以清晰地看到不同核函数决策边界的影响。线性核生成了一个直线决策边界,而RBF和多项式核则能够生成更加复杂的曲线边界,以更好地适应数据的分布。这个练习不仅帮助理解了SVM核函数的工作原理,还展示了如何在实际问题中应用这些核函数。

整个脚本的运行时间大约为5.41秒,这表明了使用SVM进行分类的效率。此外,本教程还提供了Jupyter Notebook和Python源代码的下载链接,方便学习者进一步学习和实践。

相关示例还包括了高斯过程分类(GPC)在鸢尾花数据集上的应用,以及多层感知器中正则化的变化等。这些示例进一步扩展了对机器学习模型的理解,并展示了不同模型在实际问题中的应用。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485