绘制近似线性可分支持向量机的分类边界和支持向量

python 复制代码
def plot_classifier(X1_train, X2_train, clf):
    plt.plot(X1_train[:,0], X1_train[:,1], "ro")
    plt.plot(X2_train[:,0], X2_train[:,1], "go")
    plt.scatter(clf.spv[:,0], clf.spv[:,1],
                s=100, c="y", edgecolors="b", label="support vector")

    X1, X2 = np.meshgrid(np.linspace(-4,4,50), np.linspace(-4,4,50))
    X = np.array([[x1, x2] for x1, x2 in zip(np.ravel(X1), np.ravel(X2))])
    Z = clf.project(X).reshape(X1.shape)
    plt.contour(X1, X2, Z, [0.0], colors='k', linewidths=1, origin='lower')
    plt.contour(X1, X2, Z + 1, [0.0], colors='grey', linewidths=1, origin='lower')
    plt.contour(X1, X2, Z - 1, [0.0], colors='grey', linewidths=1, origin='lower')
    plt.legend()
    plt.show()

这段代码定义了一个函数 plot_classifier,用于可视化支持向量机(SVM)的分类结果、支持向量和决策边界。具体来说,它绘制了两个训练集的点,标记了支持向量,并显示了分类器的决策边界和间隔边界。让我们逐步解释每一部分的功能:

1. 绘制训练数据点

python 复制代码
plt.plot(X1_train[:,0], X1_train[:,1], "ro")
plt.plot(X2_train[:,0], X2_train[:,1], "go")
  • X1_trainX2_train :分别是属于两个不同类别的训练数据集。假设 X1_train 代表第一类的数据,X2_train 代表第二类的数据。每个数据点有两个特征,所以它们是二维的。
  • 使用 plt.plot 绘制训练数据:
    • "ro" 用红色圆圈绘制第一类训练数据点。
    • "go" 用绿色圆圈绘制第二类训练数据点。

2. 绘制支持向量

python 复制代码
plt.scatter(clf.spv[:,0], clf.spv[:,1],
            s=100, c="y", edgecolors="b", label="support vector")
  • clf.spv :这是训练好的 SVM 模型 clf 中的支持向量(spv),包含所有在训练过程中被识别为支持向量的样本点。
  • 使用 plt.scatter 绘制支持向量:
    • s=100:设置支持向量的大小。
    • c="y":支持向量的颜色设为黄色。
    • edgecolors="b":支持向量的边框颜色为蓝色。
    • label="support vector":用于图例标记支持向量。

3. 创建网格数据

python 复制代码
X1, X2 = np.meshgrid(np.linspace(-4, 4, 50), np.linspace(-4, 4, 50))
X = np.array([[x1, x2] for x1, x2 in zip(np.ravel(X1), np.ravel(X2))])
  • np.meshgrid :生成一个二维的网格数据,这些网格点用于绘制分类边界。np.linspace(-4, 4, 50) 表示生成从 -4 到 4 的 50 个等间隔点,X1X2 分别对应网格的横轴和纵轴坐标。
  • np.ravel(X1)np.ravel(X2):将网格点展平成一维数组,便于后续将每个网格点的坐标组合。
  • X :将网格点 ( x 1 , x 2 ) (x1, x2) (x1,x2) 组合成二维数组,作为分类器的输入,计算这些点的分类结果。

4. 计算网格上的分类结果

python 复制代码
Z = clf.project(X).reshape(X1.shape)
  • clf.project(X) :通过分类器 clf 对网格上的每个点 X X X 进行分类,返回的结果是分类器的决策函数值 f ( x ) = w T x + b f(x) = w^T x + b f(x)=wTx+b,用于确定分类边界。
  • Z :分类结果是一个形状与网格 X 1 X1 X1 和 X 2 X2 X2 相同的二维数组,用于绘制等高线图。

5. 绘制决策边界和间隔边界

python 复制代码
plt.contour(X1, X2, Z, [0.0], colors='k', linewidths=1, origin='lower')
plt.contour(X1, X2, Z + 1, [0.0], colors='grey', linewidths=1, origin='lower')
plt.contour(X1, X2, Z - 1, [0.0], colors='grey', linewidths=1, origin='lower')
  • plt.contour :用于绘制等高线图,显示分类器的决策边界和间隔边界。
    • Z:分类结果,其中 Z = 0 Z = 0 Z=0 表示决策边界(超平面),对应分类函数 f ( x ) = 0 f(x) = 0 f(x)=0。
    • Z + 1Z - 1:分别表示间隔边界 f ( x ) = 1 f(x) = 1 f(x)=1 和 f ( x ) = − 1 f(x) = -1 f(x)=−1。
    • colors='k':决策边界的颜色为黑色。
    • colors='grey':间隔边界的颜色为灰色。
    • linewidths=1:设置线条宽度。

6. 显示图例和绘图

python 复制代码
plt.legend()
plt.show()
  • plt.legend():显示图例,标注支持向量。
  • plt.show():展示完整的绘图结果。

总结

  • 输入数据点 :函数通过 plt.plot 绘制两个类别的训练数据点,红色代表第一类,绿色代表第二类。
  • 支持向量 :使用 plt.scatter 绘制支持向量,并用黄色标记、蓝色边框强调支持向量的重要性。
  • 分类边界 :通过 plt.contour 绘制决策边界(黑色)和间隔边界(灰色)。
  • 网格点预测:通过在二维网格上的预测,确定分类器的决策区域,并在图中可视化。
相关推荐
Coding茶水间4 分钟前
基于深度学习的水面垃圾检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
乐迪信息28 分钟前
乐迪信息:煤矿皮带区域安全管控:人员违规闯入智能识别
大数据·运维·人工智能·物联网·安全
Dragon水魅31 分钟前
使用 LLaMA Factory 微调一个 Qwen3-0.6B 猫娘
人工智能·语言模型
Deepoch43 分钟前
Deepoc具身模型开发板:农业机器人的“智能升级模块”革命
人工智能·科技·机器人·采摘机器人·农业机器人·具身模型·deepoc
paopao_wu1 小时前
声音克隆与情感合成:IndexTTS2让AI语音会“演戏”
人工智能
ConardLi1 小时前
AI:我裂开了!现在的大模型评测究竟有多变态?
前端·人工智能·后端
这是你的玩具车吗1 小时前
能和爸妈讲明白的大模型原理
前端·人工智能·机器学习
产品设计大观2 小时前
6个宠物APP原型设计案例拆解:含AI问诊、商城、领养、托运
大数据·人工智能·ai·宠物·墨刀·app原型·宠物app
Codebee2 小时前
Ooder全栈框架:AI理解业务的多字段表单智能布局技术实现
人工智能
weilaikeqi11112 小时前
汪喵灵灵荣获“兴智杯”全国AI创新应用大赛一等奖,彰显AI宠物医疗硬实力
人工智能·百度·宠物