当前位置: 首页 > article >正文

基于Python的二分类神经网络实战项目

项目简介本项目是一个基于Python的完整神经网络实战案例旨在通过构建一个双层全连接神经网络输入层-隐藏层-输出层解决经典的二分类问题。项目涵盖了从数据生成、模型构建、训练优化到结果可视化的全流程适合作为机器学习入门教程或算法验证的基础平台。核心功能数据模拟与预处理利用Scikit-Learn生成带有噪声的二分类数据集并自动划分为训练集与测试集。神经网络构建手写神经网络类包含前向传播与反向传播算法支持自定义隐藏层节点数与学习率。模型训练与监控通过梯度下降法优化损失函数并实时记录训练过程中的Loss变化。结果可视化绘制决策边界与损失曲线直观展示模型的分类效果与收敛情况。技术栈编程语言Python 3.x核心库NumPy矩阵运算、Matplotlib数据可视化、Scikit-Learn数据处理项目结构项目主要由一个Python脚本构成逻辑清晰易于扩展。数据生成模块make_classification生成模拟数据。模型定义模块NeuralNetwork类封装了网络结构与训练逻辑。训练与评估模块主程序负责调用模型进行训练并输出准确率。运行指南环境准备确保已安装Python环境及必要的第三方库。可以通过以下命令安装依赖bashpip install numpy matplotlib scikit-learn运行项目直接运行主脚本文件bashpython sets.pyimport numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # --- 1. 定义神经网络类 (必须在使用之前定义) --- class NeuralNetwork: def __init__(self, input_size, hidden_size, output_size): # 初始化权重和偏置 # 使用随机数初始化种子固定以保证结果可复现 np.random.seed(42) self.W1 np.random.randn(input_size, hidden_size) self.b1 np.zeros((1, hidden_size)) self.W2 np.random.randn(hidden_size, output_size) self.b2 np.zeros((1, output_size)) def sigmoid(self, z): # 防止溢出 z np.clip(z, -500, 500) return 1 / (1 np.exp(-z)) def sigmoid_derivative(self, a): return a * (1 - a) def forward(self, X): # 前向传播 self.z1 np.dot(X, self.W1) self.b1 self.a1 self.sigmoid(self.z1) self.z2 np.dot(self.a1, self.W2) self.b2 self.a2 self.sigmoid(self.z2) return self.a2 def train(self, X, y, learning_rate, epochs): losses [] m X.shape[0] for i in range(epochs): # 前向传播 output self.forward(X) # 计算损失 (均方误差) loss np.mean((y - output) ** 2) losses.append(loss) # 反向传播 dz2 (output - y) * self.sigmoid_derivative(output) dW2 np.dot(self.a1.T, dz2) / m db2 np.sum(dz2, axis0, keepdimsTrue) / m da1 np.dot(dz2, self.W2.T) dz1 da1 * self.sigmoid_derivative(self.a1) dW1 np.dot(X.T, dz1) / m db1 np.sum(dz1, axis0, keepdimsTrue) / m # 更新参数 self.W1 - learning_rate * dW1 self.b1 - learning_rate * db1 self.W2 - learning_rate * dW2 self.b2 - learning_rate * db2 # 每100次打印一次进度 if i % 100 0: print(fEpoch {i}, Loss: {loss:.4f}) return losses # --- 2. 主程序开始 --- if __name__ __main__: # 设置中文字体支持 (防止画图报错) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False print(1. 生成模拟数据集...) # 生成二分类数据集 X, y make_classification(n_samples1000, n_features2, n_informative2, n_redundant0, n_clusters_per_class1, random_state42) y y.reshape(-1, 1) # 转换形状 # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 可视化数据集 plt.figure(figsize(8, 6)) plt.scatter(X[:, 0], X[:, 1], cy.flatten(), cmapcoolwarm, edgecolork, s40) plt.title(模拟数据集分布) plt.xlabel(特征 1) plt.ylabel(特征 2) plt.savefig(dataset_visualization.png) print( - 数据集图片已保存: dataset_visualization.png) plt.close() print(\n2. 训练神经网络模型...) # 关键修正点input_size 必须是整数取 shape 的第一个元素特征数量 input_size X_train.shape[1] hidden_size 10 # 隐藏层神经元数量 output_size 1 # 输出层二分类 learning_rate 0.5 epochs 1000 # 实例化网络 (这里之前报错是因为找不到类或参数类型不对) nn NeuralNetwork(input_size, hidden_size, output_size) # 开始训练 losses nn.train(X_train, y_train, learning_rate, epochs) # --- 3. 结果评估与可视化 --- print(\n3. 评估模型...) train_pred nn.forward(X_train) train_pred_labels (train_pred 0.5).astype(int) train_acc np.mean(train_pred_labels y_train) print(f训练集准确率: {train_acc * 100:.2f}%) test_pred nn.forward(X_test) test_pred_labels (test_pred 0.5).astype(int) test_acc np.mean(test_pred_labels y_test) print(f测试集准确率: {test_acc * 100:.2f}%) # 绘制损失曲线 plt.figure(figsize(8, 5)) plt.plot(losses) plt.title(训练损失曲线 (Loss Curve)) plt.xlabel(Epoch) plt.ylabel(Loss) plt.grid(True) plt.savefig(loss_curve.png) print( - 损失曲线图片已保存: loss_curve.png) plt.show()预期输出程序运行后将输出训练过程中的损失值Loss变化并在结束后生成两张图片dataset_visualization.png原始数据分布图。decision_boundary.png模型训练后的分类决策边界图。初始化__init__随机初始化权重矩阵 WW 和偏置 bb 打破对称性。激活函数sigmoid引入非线性因素将输出压缩至(0,1)区间用于二分类概率预测。前向传播forward计算 ZW⋅XbZW⋅Xb 并通过激活函数得到预测值 Y^Y^ 。反向传播backward利用链式法则计算梯度更新权重以最小化均方误差或交叉熵损失。增加激活函数选项支持ReLU、Tanh等激活函数对比不同函数对收敛速度的影响。引入正则化添加L2正则化项防止模型过拟合。多分类支持修改输出层为Softmax支持MNIST等手写数字识别等多分类任务。动态绘图使用matplotlib.animation实现训练过程中决策边界的动态演变展示。

相关文章:

基于Python的二分类神经网络实战项目

项目简介本项目是一个基于Python的完整神经网络实战案例,旨在通过构建一个双层全连接神经网络(输入层-隐藏层-输出层),解决经典的二分类问题。项目涵盖了从数据生成、模型构建、训练优化到结果可视化的全流程,适合作为…...

jEasyUI 自定义对话框

jEasyUI 自定义对话框 引言 jEasyUI是一款流行的前端框架,它提供了一套完整的UI组件,旨在帮助开发者快速构建富客户端应用程序。在jEasyUI中,对话框是一个非常重要的组件,它可以用于显示信息、收集用户输入或执行其他交互任务。本文将详细介绍如何使用jEasyUI自定义对话框…...

STM32看门狗库设计与FreeRTOS工程实践

1. STM32看门狗(Watchdog)库深度解析与工程实践1.1 看门狗在嵌入式系统中的核心价值在工业控制、医疗设备、汽车电子等对可靠性要求极高的嵌入式场景中,软件死锁、硬件异常、电磁干扰导致的程序跑飞是必须应对的关键风险。STM32微控制器内置的…...

春和景明聚知己 嬴氏酒香醉春光

春风送暖,万物复苏,山野间绿意蔓延,枝头繁花盛放,正是一年中踏春赏景、邀约好友共赴自然的绝佳时节。褪去日常的忙碌与疲惫,邀三五知己,寻一处清幽草地,伴青山绿水、鸟语花香,围坐一…...

OpenClaw离线部署方案:Qwen3-32B镜像在无网络环境中的适配改造

OpenClaw离线部署方案:Qwen3-32B镜像在无网络环境中的适配改造 1. 离线部署的核心挑战与解决思路 去年在给某研究所部署内部知识管理系统时,我第一次遇到完全隔离的局域网环境。当时尝试用OpenClaw对接Qwen模型,发现官方默认安装流程完全依…...

探索基于BKA - Transformer - LSTM的数据回归预测

基于BKA-Transformer-LSTM的数据回归预测 模型结合Transformer的全局注意力机制和LSTM的短期记忆及序列处理能力 首先,采用Transformer自注意力机制捕捉数据的全局依赖性,并输出一个经过全局上下文编码的表示;然后,采用2024年最新…...

基于MMC的两端柔性直流输电系统设计仿真:包含电压平衡控制策略、最近电平调制策略、环流抑制及详...

基于MMC的两端柔性直流输电系统设计仿真 1、MMC-HVDC 电压平衡控制策略:为了实现桥臂子模块的电压动态平衡 在正常运行时,由于桥臂子模块投切存在不一致性,以及级联的子模块中的电容不断的在充电、放电或者闭锁状态切换 2、最近电平调制策略&…...

探索拖火车混合A星路径规划算法

拖火车混合a星路径规划算法 在路径规划领域,各种算法层出不穷,今天咱就唠唠拖火车混合A星路径规划算法。这算法融合了传统A星算法的优势,并针对特定场景进行了创新,就像是给A星算法穿上了特制的“战衣”,以应对更复杂…...

Cobra嵌入式VAD引擎:MCU端语音活动检测实战指南

1. Cobra嵌入式语音活动检测引擎技术解析1.1 工程定位与核心价值Cobra 是由 Picovoice 开发的轻量级、高精度语音活动检测(Voice Activity Detection, VAD)引擎,专为资源受限的微控制器(MCU)平台设计。其核心工程目标并…...

RemotelyAnywhere远程桌面无法使用鼠标操作

问题描述RemotelyAnywhere远程桌面无法使用鼠标操作,点击一下就刷新页面,无法输入密码解决方案1、使用360浏览器打开页面2、使用兼容模式3、启用系统的TLS 1.2支持 (解决核心矛盾)这是最关键的一步,用来强制让电脑支持相对较新的TLS 1.2协议&…...

FastAPI项目实战:用APIRouter快速搭建一个带用户和图书管理的小型API服务

FastAPI项目实战:用APIRouter构建用户与图书管理API服务 刚接触FastAPI时,最让我惊艳的不是它的性能,而是那种"开箱即用"的爽快感。上周接手一个需要快速原型验证的项目,从零开始搭建用户和图书管理接口,只…...

RHCE练习

练习: 1. 在4月份的周一到周三的上午11点执行 0 11 * 4 1-3 2. 每天早上7点到上午11点且每2小时执行一次 0 7-11/2 * * *3. 每天6点执行 0 6 * * * 4. 每周六凌晨4点执行 0 4 * * 65. 每周六凌晨4点05执行 5 4 * * 66. 每天8:40执行 40 8 * * *7. 在每天…...

glm-5-free不输付费版!DMXAPIAI模型聚合平台,如何调用免费大模型API?

中关村论坛发布AutoGLM 沉思智能体,具备深度研究与电脑操作双重能力,GLM-5.1 编程能力与全球顶尖模型 Claude Opus 4.6 差距仅2.6 分,整体呈现技术迭代、商业化与资本市场的全面提速态势。智谱AI正式推出GLM-5-free开源模型,凭借与…...

C++的std--ranges中的策略内联编译器

C的std::ranges中的策略内联编译器:高效编程的新利器 在现代C编程中,std::ranges库的引入为算法和范围操作带来了革命性的改进。其中,策略内联编译器作为其核心优化手段之一,能够显著提升代码执行效率。本文将深入探讨这一技术的…...

OpenClaw安全防护方案:Phi-3-mini-128k-instruct任务执行边界控制

OpenClaw安全防护方案:Phi-3-mini-128k-instruct任务执行边界控制 1. 为什么需要安全防护 当我第一次让OpenClaw接管本地电脑操作权限时,那种既兴奋又忐忑的心情至今记忆犹新。看着AI自动整理文件、发送邮件、执行脚本的同时,一个挥之不去的…...

低成本自动化方案:OpenClaw+自部署Gemma-3-12b-it替代SaaS API

低成本自动化方案:OpenClaw自部署Gemma-3-12b-it替代SaaS API 1. 为什么需要替代SaaS API? 去年我负责一个自动化内容处理项目时,遇到了一个典型困境:随着任务复杂度的提升,调用商业API的成本开始失控。一个包含网页…...

零基础玩转OpenClaw:Phi-3-mini-128k-instruct镜像云端体验

零基础玩转OpenClaw:Phi-3-mini-128k-instruct镜像云端体验 1. 为什么选择云端体验OpenClaw 作为一个长期关注AI自动化工具的技术爱好者,我一直在寻找一个既强大又易于上手的本地AI助手框架。OpenClaw的出现让我眼前一亮,但第一次尝试本地安…...

Go Routine 调度器的核心逻辑

Go语言凭借其轻量级线程——Goroutine,成为高并发编程的热门选择。而Goroutine的高效运行,离不开其底层调度器的精妙设计。本文将深入解析Goroutine调度器的核心逻辑,揭示其如何实现数万并发任务的流畅调度。调度模型:M-P-G三级协…...

OpenClaw浏览器插件开发:Qwen3-14b_int4_awq增强网页交互能力

OpenClaw浏览器插件开发:Qwen3-14b_int4_awq增强网页交互能力 1. 为什么需要浏览器插件与OpenClaw结合 作为一个长期与浏览器打交道的开发者,我经常遇到需要批量处理网页数据的场景。传统做法是写一堆油猴脚本或手动复制粘贴,直到发现OpenC…...

C++的std--ranges同步问题

C的std::ranges同步问题:现代C的并发挑战 随着C20引入std::ranges,开发者获得了更简洁、更强大的范围操作工具,但在多线程环境下,std::ranges的同步问题逐渐浮出水面。范围适配器、惰性求值和视图的组合虽然提升了代码的表达力&a…...

c++编程:说反话(1009-PAT乙级)

1009&#xff1a;说反话cin >> 读取字符串时不能读取空格string s; cin >> s; // 输入 "hello world" cout << s; // 输出 "hello"&#xff08;空格后面的被丢弃&#xff09;如何读取带空格的整行&#xff1f;getline()str…...

AI 模型推理自动化部署方案实践

AI模型推理自动化部署方案实践 随着人工智能技术的快速发展&#xff0c;AI模型的训练和推理已成为企业智能化转型的核心环节。模型从开发到生产环境的部署往往面临效率低、运维复杂等问题。自动化部署方案能够显著提升推理服务的稳定性和可扩展性&#xff0c;成为企业降本增效…...

c++编程:D进制的A+B(1022-PAT乙级)

1022. D进制的AB#include<bits/stdc.h> using namespace std; int main() { int A, B, D; // 定义三个整数变量 A、B 和进制 Dcin >> A >> B >> D; // 从标准输入读取 A、B、D 的值int sum A B; // 计算…...

Candleduino:面向MAB驱动器的跨平台CAN控制库

1. Candleduino库概述&#xff1a;面向MAB Robotics驱动器的跨平台CAN控制解决方案Candleduino是一个专为嵌入式平台设计的Arduino兼容C库&#xff0c;核心目标是实现对MAB Robotics公司MD系列伺服驱动器&#xff08;Motor Drive&#xff09;与PDS系列电源分配系统&#xff08;…...

MySQL主从延迟

技术文章大纲&#xff1a;MySQL主从延迟根因诊断法引言主从复制在MySQL高可用架构中的重要性主从延迟的常见影响&#xff08;数据不一致、查询延迟、故障恢复风险&#xff09;诊断延迟问题的必要性主从延迟的核心原理主从复制的基本流程&#xff08;binlog生成、传输、重放&…...

【设计模式】遍历集合的艺术:深入探索迭代器模式的无限可能

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

EnviroDIY_DS3231库详解:DS3231高精度RTC驱动与低功耗唤醒实践

1. EnviroDIY_DS3231 库深度解析&#xff1a;面向嵌入式数据采集系统的高精度RTC驱动实践1.1 库定位与工程价值EnviroDIY_DS3231 是一个专为 Arduino 生态设计的 DS3231 实时时钟&#xff08;RTC&#xff09;驱动库&#xff0c;其核心目标并非简单封装 IC 通信&#xff0c;而是…...

电商剪辑师慌了!AI1 小时出 50 条视频,易元 AI 帮工厂 / 品牌日更千条素材

电商剪辑师的“铁饭碗”正被AI打破&#xff01;当下电商流量竞争白热化&#xff0c;短视频是工厂、品牌获客转化的核心载体&#xff0c;日常上新、投流推广、社群分发等都需大量素材支撑。但传统人工剪辑低效高耗&#xff0c;3名专业剪辑师满负荷工作&#xff0c;日均产出不足1…...

RoPE → Attention 完整

好的&#xff0c;我帮你把之前的 “Transformer 输入 → RoPE → Attention” 全流程整理成一个完整的、连贯的文档。每一步都包含 数学表达 PyTorch 示例代码&#xff0c;方便直接参考或实现。Transformer 前向 RoPE 全流程1️⃣ 输入&#xff1a;Token → Embedding 数学表…...

OpenClaw备份策略:Qwen3-32B配置与技能库容灾方案

OpenClaw备份策略&#xff1a;Qwen3-32B配置与技能库容灾方案 1. 为什么需要备份OpenClaw环境 去年冬天的一个深夜&#xff0c;我的OpenClaw自动化脚本突然停止工作。经过排查发现是SSD故障导致~/.openclaw目录损坏&#xff0c;丢失了精心调校的模型配置、技能库和任务历史记…...