支持向量机(SVM)在鸢尾花数据集上的应用

支持向量机SVM)是一种常用的监督学习算法,用于分类和回归分析。本文将通过鸢尾花数据集(Iris dataset)来演示SVM的工作原理。鸢尾花数据集包含了150个样本,每个样本有4个特征,分别代表鸢尾花萼片和花瓣的长度和宽度。目标是使用SVM对这些样本进行分类

首先,需要导入必要的库,包括matplotlib用于数据可视化,numpy用于数值计算,以及sklearn中的datasets和svm模块。使用sklearn.datasets中的load_iris()函数来加载鸢尾花数据集。然后,从数据集中提取特征和标签,并对其进行预处理,例如去除某些类别的数据,以及对数据进行随机打乱。

import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, svm iris = datasets.load_iris() X = iris.data y = iris.target # 只保留类别0和1的数据 X = X[y != 0, :2] y = y[y != 0] 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):]

接下来,使用SVM的三种不同核函数(linear、rbf和poly)来训练模型。对于每种核函数,都使用相同的gamma值(10),并绘制出对应的决策边界。决策边界是SVM模型中的一个重要概念,它将数据集分割为不同的类别。在二维空间中,决策边界是一条直线;在更高维空间中,决策边界可能是一个超平面。

# 训练SVM模型并绘制决策边界 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_max = X[:, 0].min(), X[:, 0].max() y_min, y_max = X[:, 1].min(), 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()

通过上述代码,可以看到不同核函数下的决策边界。在实际应用中,可以根据具体问题选择合适的核函数,以达到最佳的分类效果。此外,还可以通过调整gamma值等参数来优化模型的性能。

总的来说,SVM是一种强大的分类算法,适用于各种不同的数据集和问题。通过选择合适的核函数和参数,可以利用SVM实现高效的数据分类。本文通过鸢尾花数据集的示例,展示了SVM的基本原理和使用方法。希望这些信息对有所帮助。

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