自定义数据集 使用scikit-learn中svm的包实现svm分类

news/2025/2/7 13:45:43/

代码:

import numpy as np  # 导入用于数值计算的库
import matplotlib.pyplot as plt  # 导入用于绘图的库# class1_points 和 class2_points 分别定义了两个类别的数据点,二维坐标
class1_points = np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4, 1.1]])class2_points = np.array([[3.2, 3.2],[3.7, 2.9],[3.2, 2.6],[1.7, 3.3],[3.4, 2.6],[4.1, 2.3],[3.0, 2.9]])# 将 class1 和 class2 的 x 和 y 坐标合并为一个数据集
x1_data = np.concatenate((class1_points[:, 0], class2_points[:, 0]))  # 所有的 x1 坐标
x2_data = np.concatenate((class1_points[:, 1], class2_points[:, 1]))  # 所有的 x2 坐标# 创建标签,class1 点标记为 1,class2 点标记为 -1
y = np.concatenate((np.ones(class1_points.shape[0]), -np.ones(class2_points.shape[0])))# 初始化超平面的参数 w1, w2 和偏置 b
w1 = 0.1
w2 = 0.1
b = 0# 学习率
learning_rate = 0.05# 数据集的大小
l_data = x1_data.size# 创建图形和子图
fig, (ax1, ax2) = plt.subplots(2, 1)# 初始化存储每一步的损失值和迭代步数
step_list = np.array([])
loss_values = np.array([])# 设定迭代次数,控制模型训练的周期
num_iterations = 1000
for n in range(1, num_iterations + 1):# 计算超平面预测值:z = w1 * x1 + w2 * x2 + bz = w1 * x1_data + w2 * x2_data + b# 计算每个点的损失:Hinge lossyz = y * z  # 预测值与真实标签的乘积loss = 1 - yz  # hinge loss 为 1 - yz,当 yz > 1 时,损失为 0loss[loss < 0] = 0  # 如果损失小于 0,置为 0hinge_loss = np.mean(loss)  # 计算平均损失(取所有数据点的损失均值)loss_values = np.append(loss_values, hinge_loss)  # 保存当前步的损失值step_list = np.append(step_list, n)  # 保存当前迭代步数# 初始化梯度gradient_w1 = 0gradient_w2 = 0gradient_b = 0# 梯度下降法计算梯度for i in range(len(y)):if loss[i] > 0:  # 仅考虑损失大于 0 的点gradient_w1 += -y[i] * x1_data[i]gradient_w2 += -y[i] * x2_data[i]gradient_b += -y[i]# 平均化梯度gradient_w1 /= len(y)gradient_w2 /= len(y)gradient_b /= len(y)# 更新超平面参数:w1, w2, bw1 -= learning_rate * gradient_w1w2 -= learning_rate * gradient_w2b -= learning_rate * gradient_b# 每 50 步或第一次迭代时,绘制一次更新图frequence_display = 50if n % frequence_display == 0 or n == 1:if np.abs(w2) < 1e-5:  # 避免 w2 太小导致无法计算continue# 计算超平面的直线方程,用于绘制超平面x1_min, x1_max = 0, 6  # x1 的范围x2_min, x2_max = -(w1 * x1_min + b) / w2, -(w1 * x1_max + b) / w2  # x2 的值,基于超平面方程计算# 清除上一轮绘制的图像,绘制新的图ax1.clear()ax1.scatter(x1_data[:len(class1_points)], x2_data[:len(class1_points)], c='red', label='Class 1')  # class1 红色ax1.scatter(x1_data[len(class1_points):], x2_data[len(class1_points):], c='blue', label='Class 2')  # class2 蓝色ax1.plot([x1_min, x1_max], [x2_min, x2_max], 'r-')  # 绘制超平面ax1.set_title(f"SVM: w1={round(w1.item(), 3)}, w2={round(w2.item(), 3)}, b={round(b.item(), 3)}")# 绘制损失函数的变化图ax2.clear()ax2.plot(step_list, loss_values, 'g-')  # 损失图,绿色线ax2.set_xlabel("Step")  # x 轴为步数ax2.set_ylabel("Loss")  # y 轴为损失值# 每次绘图后暂停 1 秒,展示图像plt.pause(1)# 显示最终图形
plt.show()

结果:


http://www.ppmy.cn/news/1570077.html

相关文章

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行&#xff08;下载&#xff09; 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…

Pytest+selenium UI自动化测试实战实例

今天来说说pytest吧&#xff0c;经过几周的时间学习&#xff0c;有收获也有疑惑&#xff0c;总之最后还是搞个小项目出来证明自己的努力不没有白费。 环境准备 1 确保您已经安装了python3.x 2 配置python3pycharmselenium2开发环境 3 安装pytest库pip install p…

Go 中 defer 的机制

文章目录 Go 语言中 defer 的底层机制与实战解析一、defer 的执行顺序&#xff1a;后进先出&#xff08;LIFO&#xff09;示例 &#xff1a;多个 defer 的执行顺序 二、defer 的参数预计算&#xff1a;值拷贝的陷阱示例 &#xff1a;参数预计算的影响 三、defer 与闭包&#xf…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_vslprintf 函数

ngx_vslprintf 声明 ngx_vslprintf的声明在 ngx_string.h 中&#xff1a; u_char *ngx_vslprintf(u_char *buf, u_char *last, const char *fmt, va_list args); ngx_vslprintf 实现 ngx_string.c 中 ngx_vslprintf 函数的定义 u_char * ngx_vslprintf(u_char *buf, u_char…

vscode修改自定义模板

vscode修改自定义模板 打开命令面板&#xff1a;你可以通过快捷键 CtrlShiftP&#xff08;Windows/Linux&#xff09;或CmdShiftP&#xff08;macOS&#xff09;打开命令面板。输入并选择“首选项: 配置用户代码片段”&#xff1a;在命令面板中输入 Preferences:Configure Use…

PEP8代码规范

文章目录 波浪线 波浪线 不同UI下可能会有差异&#xff0c;但可做通用参考 红色 代码错误&#xff0c;必须处理&#xff01;代码才能正常运行 – 代码未顶格 – 代码未写完灰色 建议改进&#xff0c;不会影响代码正常执行&#xff0c;可以通过ide的格式规范调整 – 注释缺少空…

可靠冲突性多视角学习:通过证据驱动的多视角融合提供决策可靠性

2024年2月28日&#xff0c;由多位作者联合提出了一种名为可靠冲突性多视角学习&#xff08;RCML&#xff09;的框架&#xff0c;其核心贡献在于为含有冲突性实例的多视角数据提供决策结果与可靠性评估。该方法通过证据驱动的多视角融合&#xff08;ECML&#xff09;策略&#x…

【分布式架构理论3】分布式调用(2):API 网关分析

文章目录 一、API 网关的作用1. 业务层面&#xff1a;简化调用复杂性2. 系统层面&#xff1a;屏蔽客户端调用差异3. 其他方面&#xff1a; 二、API 网关的技术原理1. 协议转换2. 链式处理3. 异步请求机制1. Zuul1&#xff1a;同步阻塞处理2. Zuul2&#xff1a;异步非阻塞处理 三…