支持向量机 SVM 示例和可视化 - 二维

对于机器学习中的分类问题,支持向量机(SVM)是一种流行而强大的算法,尤其是它通过清晰地绘制数据的决策边界,具有易于直观理解的优势。在本篇文章中,我们将学习如何使用 Python scikit-learn 使用该库浏览 SVM 示例,并将结果与 可视化这样你就能了解 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 SVC
  • numpy:用于数组和数学计算的库。
  • 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 训练出的数据分类边界,并看到测试数据在这些边界内被正确分类。

支持向量机可视化示例设施名称

  1. 分类边界以线性边界的形式出现,将两个类别分开。
  2. 每个数据点根据其类别以不同的颜色显示。
  3. 模型学习到的支持向量也可以在可视化效果图中看到,即位于边界附近的数据点。

完整的集成代码

以下是支持向量机 (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)

代码说明

  1. 生成数据: 数据集分类 函数来生成二维数据,以便用 SVM 对其进行可视化。
  2. 数据分区: 训练测试拆分将数据分为训练数据(70%)和测试数据(30%)。
  3. 创建 SVM 模型: 交换虚电路 类的 内核='线性来创建线性支持向量机模型。
  4. 模型培训: 合适 方法,根据训练数据来训练模型。
  5. 可视化功能用于绘制生成模型的分类边界的功能,可根据每个点的预测结果生成网格以直观显示分类边界。
  6. 将结果可视化:使用测试数据来验证模型学习到的分类界限。

常见问题(FAQ)

Q1. 什么是支持向量机(SVM)?
A1. SVM 是一种分类算法,它能找到将给定数据分为两类的最佳边界。支持向量是在定义边界时起重要作用的数据点。

Q2. 内核是什么?
A2. 内核是一种转换数据的函数,可以将具有非线性关系的数据进行线性分离。有许多不同的类型,包括线性内核、多项式内核和 RBF 内核。

问题 3:仅使用二维数据能否实现支持向量机的可视化?
A3. 二维或三维数据可以直观地实现可视化,但高维数据难以直观表示。 不过,SVM 可用于高维数据。

问题 4 SVM 有哪些优缺点?
优点是对高维数据有良好的表现,并能防止过度拟合。缺点是对于大量数据来说,训练时间可能较长。

清理支持向量机可视化

在本篇文章中,我们将介绍 Python 的 scikit-learn使用 支持向量机(SVM)通过对结果的可视化,我们得以亲眼目睹 SVM 如何在数据上设定分类边界,以及如何将结果可视化。在机器学习中,可视化是了解和改进模型性能的一个非常有用的工具。尝试用更复杂的数据和不同的核来扩展 SVM 模型!

类似文章