支持向量机 SVM 示例和可视化 - 二维
对于机器学习中的分类问题,支持向量机(SVM)是一种流行而强大的算法,尤其是它通过清晰地绘制数据的决策边界,具有易于直观理解的优势。在本篇文章中,我们将学习如何使用 Python scikit-learn 使用该库浏览 SVM 示例,并将结果与 可视化这样你就能了解 SVM 的工作原理,并看到结果是如何直观呈现的。

了解支持向量机 (SVM)
SVMSVM 是一种监督学习算法,它能找到将给定数据分成两类的最佳边界(超平面)。 SVM 背后的理念是通过最大化最接近分类边界的数据点(支持向量)的距离来生成最佳分类器。
SVM 在处理高维度数据时尤为有效,甚至可以使用核函数对非线性数据进行分类。在本例中,我们将使用二维数据来可视化 SVM 对数据进行分类的边界。
逐步编写 Python 代码
1. 导入所需的库
首先,加载实现 SVM 所需的库,并将结果可视化。
将 numpy 导入 np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVCnumpy:用于数组和数学计算的库。matplotlib.pyplot:一个图形和可视化库。sklearn.datasets模块:提供一个简单数据集的模块,在本例中为分类我们将使用一个数据集。训练测试拆分:用于分离训练和测试数据的函数。交换虚电路支持向量机分类器:实现支持向量机(SVM)分类器的类。
2. 创建样本数据
创建简单的二维数据,并用 SVM 对其进行训练。
# 生成简单的二维数据
X, y = datasets.make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42)
将 # 数据集分为训练和测试两部分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)n_samples=100:生成 100 个样本。n_features=2:创建具有两个特征的二维数据。n_informative=2这两个特征都是分类的有用信息。
3. 创建并训练 SVM 模型
将生成的数据分为训练数据和测试数据后,训练 SVM 模型。
创建 # SVM 模型
model = SVC(kernel='linear')
训练 # 模型
model.fit(X_train, y_train)内核='线性:用线性内核找出一条直线,将两个等级分开。
可视化 SVM 结果
现在可视化训练好的 SVM 模型和测试数据的分类边界。支持向量机 可视化对于了解 SVM 模型如何对数据进行分类非常有用。
可视化 # 训练数据和分类边界的函数
def plot_decision_boundary(X, y, model):
生成可视化 # 边界的网格
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01)、
np.arange(y_min, y_max, 0.01))
使用 # 模型计算每个坐标的预测值
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
可视化 # 边界
plt.contourf(xx, yy, Z, alpha=0.8)
可视化 # 数据点
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolours='k', marker='o', s=50)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("SVM 决策边界")
plt.show()
使用 # 训练模型直观显示边界
plot_decision_boundary(X_test, y_test, model)np.meshgrid网格:生成网格,使边界可视化。model.predict根据模型对生成网格的预测值绘制边界。plt.contourf根据预测结果可视化分类边界。plt.scatter可视化:您可以通过可视化真实数据点来验证模型是否对其进行了正确分类。
运行上述代码时,您将看到 SVM 训练出的数据分类边界,并看到测试数据在这些边界内被正确分类。
支持向量机可视化示例设施名称
- 分类边界以线性边界的形式出现,将两个类别分开。
- 每个数据点根据其类别以不同的颜色显示。
- 模型学习到的支持向量也可以在可视化效果图中看到,即位于边界附近的数据点。
完整的集成代码
以下是支持向量机 (SVM) 模型的完整代码。我们在必要的地方添加了注释以解释步骤。
将 numpy 导入 np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
# 1. 生成数据
# 创建 100 个带有 2 个特征的样本,创建一个类间分布良好的数据集
X, y = datasets.make_classification(n_samples=100, n_features=2, n_informative=2、
n_redundant=0, random_state=42)
# 2.数据分区
# 将数据分为 70% 用于训练,30% 用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 3.生成 SVM 模型
使用 # 线性核创建 SVM 模型
model = SVC(kernel='linear')
# 4.训练模型
使用 # 训练数据训练 SVM 模型
model.fit(X_train, y_train)
# 5.定义可视化函数
可视化 # 训练模型的分类边界和数据点的函数
def plot_decision_boundary(X, y, model):
# 5.1 设置边界可视化网格
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01)、
np.arange(y_min, y_max, 0.01))
# 5.2 计算模型在网格中每一点的预测值
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 5.3 根据预测值绘制分类边界
plt.contourf(xx, yy, Z, alpha=0.8)
# 5.4 可视化实际数据点
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolours='k', marker='o', s=50)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("SVM 决策边界")
plt.show()
# 6.使用测试数据直观显示分类边界
plot_decision_boundary(X_test, y_test, model)代码说明
- 生成数据:
数据集分类函数来生成二维数据,以便用 SVM 对其进行可视化。 - 数据分区:
训练测试拆分将数据分为训练数据(70%)和测试数据(30%)。 - 创建 SVM 模型:
交换虚电路类的内核='线性来创建线性支持向量机模型。 - 模型培训:
合适方法,根据训练数据来训练模型。 - 可视化功能用于绘制生成模型的分类边界的功能,可根据每个点的预测结果生成网格以直观显示分类边界。
- 将结果可视化:使用测试数据来验证模型学习到的分类界限。
常见问题(FAQ)
Q1. 什么是支持向量机(SVM)?
A1. SVM 是一种分类算法,它能找到将给定数据分为两类的最佳边界。支持向量是在定义边界时起重要作用的数据点。
Q2. 内核是什么?
A2. 内核是一种转换数据的函数,可以将具有非线性关系的数据进行线性分离。有许多不同的类型,包括线性内核、多项式内核和 RBF 内核。
问题 3:仅使用二维数据能否实现支持向量机的可视化?
A3. 二维或三维数据可以直观地实现可视化,但高维数据难以直观表示。 不过,SVM 可用于高维数据。
问题 4 SVM 有哪些优缺点?
优点是对高维数据有良好的表现,并能防止过度拟合。缺点是对于大量数据来说,训练时间可能较长。
清理支持向量机可视化
在本篇文章中,我们将介绍 Python 的 scikit-learn使用 支持向量机(SVM)通过对结果的可视化,我们得以亲眼目睹 SVM 如何在数据上设定分类边界,以及如何将结果可视化。在机器学习中,可视化是了解和改进模型性能的一个非常有用的工具。尝试用更复杂的数据和不同的核来扩展 SVM 模型!




