# 机器学习-BP 网络对葡萄酒数据和数字识别数据的多分类实现-BP 网络算法 numpy 实现 **Repository Path**: ABigWildCat/my-bpnn ## Basic Information - **Project Name**: 机器学习-BP 网络对葡萄酒数据和数字识别数据的多分类实现-BP 网络算法 numpy 实现 - **Description**: BP 网络对葡萄酒数据和数字识别数据的多分类实现- BP 网络算法 numpy 实现 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 2 - **Created**: 2023-04-06 - **Last Updated**: 2025-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BP 网络对葡萄酒数据和数字识别数据的多分类实现- BP 网络算法 numpy 实现 #### 介绍 BP 网络对葡萄酒数据和数字识别数据的多分类实现- BP 网络算法 numpy 实现 #### 代码内容说明 1. 编写 BPNN 算法,对 葡萄酒数据集/手写数字集进行二分类或多分类。 (1)数据样本标签处理: 二分类任务:正类为 1,负类为 0。 多分类任务:将样本标签变为 one-hot 向量。 (2)搭建浅层神经网络:隐层数 1-2 个即可。每层神经元的个数自选。 (3)激活函数:自选(relu、sigmoid、tanh)。 代价函数:自选(交叉熵损失、均方误差)。 (4)参数更新:小批量梯度下降、动量法、adagrad、RMSProp、Adam。 (5)输出:分类准确率。 (6)可视化:迭代的代价函数曲线。 2. 程序流程图: ![程序流程图](image.png) 3. 链式法则求每层参数梯度的计算过程(手动推导) ![每层参数梯度的计算过程](image1.png) #### 安装教程 本代码需要的库:numpy、pandas、sklearn、matplotli、argparse、timeit、warnings #### 使用说明 需要在参数空间def get_arguments()中更改参数,选择不同的数据集、特征选取、类别标签、训练集测试集划分比例、随机数种子。 ![参数设置](image2.png) 1. '--dataset',选择不同的数据集,可选择 '1: the wine dataset,' '2: the digits dataset',赋给default(即 default=1 选择the wine dataset葡萄酒数据集,default=2 选择the digits dataset手写字体数据集) 2. '--features',进行特征选取,在default中选择'f0', 'f1', 'f2' or 'f3'"作为特征,方便对数据集中的特征选取,可对单个或多个特征进行处理(如default=['f0', 'f3'],选择第1个、第4个特征) 3. '--classes',选择类别标签,在default中选择 0, 1, 2,方便对数据集中的类别标签选取(如default=[0, 1, 2],选择第1、2、3个标签) 4. '--test_size', 训练集测试集划分比例,设置default=0.33, 即训练集的比例为33%,可根据需求修改 5. '--random_state', 随机数种子,default=42, 划分数据集的随机种子数为42,可根据需求修改 #### BP 网络对数字识别数据的多分类实现-代码运行结果 1. 查看样本对应的手写数字图像 ![样本对应的手写数字图像](image3.png) 2. 模型准确率 隐藏层尺寸、激活函数和学习率的设置如下。激活函数采用relu、代价函数采用交叉熵损失函数、参数更新采用梯度下降法。 ![参数设置](image4.png) 迭代20000次,得到模型准确率如下。 ![模型准确率](image5.png) 迭代20000次的代价函数曲线如下。 ![代价函数曲线](image6.png)