首页 > 编程语言 >机器学习实验五:BP 神经网络算法实现与测试

机器学习实验五:BP 神经网络算法实现与测试

时间:2024-12-21 16:19:59浏览次数:8  
标签:train 算法 神经网络 score BP 测试 test

实验五:BP 神经网络算法实现与测试

一、实验目的

深入理解 BP 神经网络的算法原理,能够使用 Python 语言实现 BP 神经网络的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

 

二、实验内容

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);

(2)使用训练集训练 BP 神经网络分类算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验五的部分。

 

 

三、算法步骤、代码、及结果

   1. 算法伪代码

初始化神经网络参数(权重和偏置)  

定义激活函数(sigmoid、ReLU等)  

重复以下步骤直到收敛:  

    前向传播:  

        1. 输入层接收输入数据  

        2. 计算隐藏层输出  

        3. 计算输出层结果  

    计算损失(成本函数)  

    反向传播:  

        1. 计算输出层误差  

        2. 计算隐藏层误差  

        3. 更新权重和偏置  

使用交叉验证法评估模型性能

   2. 算法主要代码

完整源代码\调用库方法(函数参数说明)

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 加载 iris 数据集
iris = load_iris()
X = iris.data
y = iris.target

# 留出法划分训练集和测试集,1/3 作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42, stratify=y)

# 定义 BP 神经网络分类器
bp_clf = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000, random_state=42)

# 使用训练集训练模型
bp_clf.fit(X_train, y_train)

# 五折交叉验证评估模型性能
cv_scores = cross_val_score(bp_clf, X_train, y_train, cv=5, scoring='accuracy')
print("五折交叉验证准确度:", np.round(cv_scores, 4))
print("平均准确度:", np.round(np.mean(cv_scores), 4))

y_pred_train = bp_clf.predict(X_train)
precision_train = precision_score(y_train, y_pred_train, average='macro')
recall_train = recall_score(y_train, y_pred_train, average='macro')
f1_train = f1_score(y_train, y_pred_train, average='macro')
print("训练集精度:", np.round(precision_train, 4))
print("训练集召回率:", np.round(recall_train, 4))
print("训练集 F1 值:", np.round(f1_train, 4))

# 使用测试集测试模型性能
y_pred_test = bp_clf.predict(X_test)
accuracy_test = accuracy_score(y_test, y_pred_test)
precision_test = precision_score(y_test, y_pred_test, average='macro')
recall_test = recall_score(y_test, y_pred_test, average='macro')
f1_test = f1_score(y_test, y_pred_test, average='macro')
print("测试集准确度:", np.round(accuracy_test, 4))
print("测试集精度:", np.round(precision_test, 4))
print("测试集召回率:", np.round(recall_test, 4))
print("测试集 F1 值:", np.round(f1_test, 4))

# 分析测试结果
if accuracy_test > 0.8:
    print("模型性能良好,在测试集上有较高的准确度。")
else:
    print("模型性能有待提高,可尝试调整模型参数或增加训练数据。")

 

调用库方法

 

1. load_iris

加载 Iris 数据集。

from sklearn.datasets import load_iris  

 

参数:

return_X_y: 如果为 True,返回特征和目标。如果为 False,返回一个包含数据的对象(默认值为 False)

返回值:

返回一个包含特征和目标的对象,通常通过 iris.data 和 iris.target 获取。

 

2. train_test_split

将数据随机划分为训练集和测试集。

from sklearn.model_selection import train_test_split  

 

参数:

test_size: 测试集占比(0-1之间的小数,或具体数目)。

random_state: 随机种子(确保划分可重现)。

stratify: 按类别比例划分(确保训练集和测试集类别分布一致)。

 

返回值:

返回划分后的训练数据和测试数据。

 

3. fit

用法: clf.fit(X_train, y_train)

作用: 训练模型。

 

4. cross_val_score

 

用法: cross_val_score(estimator, X, y, cv, scoring)

 

参数:

estimator: 需要评估的模型。

X: 特征数据。

y: 类别标签。

cv: 交叉验证的折数。

scoring: 评估指标(如准确率、精确率)。

 

  1. MLPClassifier()

BP 神经网络分类器

MLPClassifier(hidden_layer_sizes, max_iter, random_state)

 

参数:

hidden_layer_sizes: 隐藏层的层数和每层的神经元数,如 (100,) 表示有一层隐藏层,包含100个神经元。

max_iter: 最大迭代次数。

random_state: 随机数种子,确保结果可重复。

 

 

6. accuracy_score

计算模型在给定数据上的准确度。

from sklearn.metrics import accuracy_score  

 

参数:

y_true: 真实标签。

y_pred: 预测标签。

 

返回值:

返回预测准确率(在 0 到 1 之间的小数)。

 

7. classification_report

生成分类绩效的详细报告。

from sklearn.metrics import classification_report  

 

参数:

y_true: 真实标签。

y_pred: 预测标签。

target_names: 可选,类标签名称的列表,以便于输出可读性。

 

返回值:

返回一个字符串,包含每个类的精确率、召回率和 F1 值。

 

 

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

 

 

四、实验结果分析

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

 

 

2. 对比分析

模型在 iris 数据集上的表现非常优秀。五折交叉验证显示大多数折的准确率为1,平均准确度为0.98,说明模型在训练集上学习得很好。在训练集上,精度、召回率和 F1 值均接近0.99,表明模型几乎完美地预测了样本。测试集的准确度同样为0.98,其他评估指标也很高,显示出模型在未见数据上的良好泛化能力。尽管结果令人满意,但仍需注意过拟合的风险。总体而言,模型在这个数据集上的表现非常出色,值得进一步测试和应用。

 

五、心得体会

 

通过本次实验,我深入理解了 BP 神经网络的算法原理,包括前向传播、损失函数计算、反向传播和权重更新等关键步骤。使用 TensorFlow 框架,我成功实现了 BP 神经网络的训练与测试,并通过五折交叉验证对模型性能进行了全面评估。

在实验过程中,我遇到了一些挑战。首先,BP 神经网络的超参数选择(如隐藏层神经元数量、学习率、迭代次数等)对模型性能有很大影响,需要通过实验进行调优。其次,由于 iris 数据集较小且特征维度较低,BP 神经网络可能容易过拟合,因此需要注意正则化方法和早停策略的应用。

通过五折交叉验证,我得到了模型在不同训练集和验证集上的性能表现,这有助于我更全面地了解模型的泛化能力。测试集上的结果也验证了模型的有效性。

总的来说,这次实验不仅提高了我的编程能力,还加深了我对 BP 神经网络的理解和应用能力。我认识到,在实际应用中,除了算法本身外,数据预处理、特征选择和模型调优等方面也同样重要。

 

标签:train,算法,神经网络,score,BP,测试,test
From: https://www.cnblogs.com/drz1145141919810/p/18620871

相关文章

  • KMP算法
    更新日志2024/12/21:开工。作用KMP算法本质作用是求字符串前缀的最长border。border:同时是一个字符串前缀和后缀的字符串,称为前者的border。常见的,我们可以使用它进行字符串匹配。思路假如我们要在\(s_1\)中匹配\(s_2\)。我们使用nxt数组储存\(s_2\)所有前......
  • 计算机视觉:YOLO V5目标检测算法模型
    1.YOLOV5模型概述1.1YOLOv5的概念YOLOv5是一种基于深度学习的目标检测模型,相较于YOLOv4,YOLOv5模型在目标检测精度和速度上都有了显著的提升。YOLOv5模型基于PyTorch开发,利用主干网络、检测头和损失函数等模块,能够实现对图像中多个目标的快速检测和定位。1.2YOLOv5模型......
  • 强化学习算法中的log_det_jacobian
    相关:https://colab.research.google.com/github/google/brax/blob/main/notebooks/training_torch.ipynb之前写过一篇同主题的文章,后来发现这个文章中有一些问题,不过也有些不好改动,于是就新开一篇来进行更正和补充!!!之前版本:https://www.cnblogs.com/xyz/p/18564777之所以之......
  • 1v1视频软件源码,如何优化快速排序算法低效问题?
    1v1视频软件源码,如何优化快速排序算法低效问题?快速排序快速排序也遵循分治的思想,它与归并排序不同的是,快速排序是原地排序,而且快速排序会先排序当前数组,再对子数组进行排序,它的算法步骤如下:1、哨兵划分:选取数组中最左端元素为基准数,将小于基准数的元素放在基准数左边,将......
  • 77.《排序算法实现》
    插入排序:直接插入排序:voidInsertSort(ElemTypeA[],intn){inti,j;for(inti=2;i<=n;i++)//从第二个元素开始遍历数组if(A[i]<A[i-1])//如果当前元素小于前一个元素{A[0]=A[i];//将当前元素暂存到A[0]......
  • 声音提取引擎算法
    声音提取引擎算法是一种用于从音频信号中提取有用信息的技术,广泛应用于语音识别、音频分析和声音处理等领域。我们可以总结出几种主要的声音提取算法及其应用。MFCC是最常用的语音特征提取方法之一,它通过傅里叶变换和滤波器组处理来捕捉语音信号的频率和振幅特征。MFCC的计算......
  • 【算法】【优选算法】模拟
    目录一、模拟简介二、1576.替换所有的问号三、495.提莫攻击四、6.N字形变换五、38.外观数列六、1419.数⻘蛙一、模拟简介模拟就是依葫芦画瓢,题目会将如何做给出来,直接做出来就行。做题过程:先模拟算法流程,再将流程转化为代码。二、1576.替换所有的问号题目链接:1......
  • 用C#实现感知器算法——从零开始打造一个简单的机器学习模型!
    感知器(Perceptron)是一个经典的机器学习算法,常用于二分类问题。它是神经网络的基础,最早由FrankRosenblatt在1958年提出。今天,我们将用C#实现一个简单的感知器算法,让你理解感知器的工作原理,并能够亲自编码一个可用的模型。一、感知器算法概述感知器是一种线性分类器,其核心思想是......
  • 最优雅的算法——快速排序
    快速排序:探索两种流行的方法快速排序,这个听起来有点技术性的术语,实际上是一个既高效又优雅的算法,它能够将一堆混乱的数据快速整理得井井有条。今天,我们将通过一种轻松愉快的方式,一起揭开快速排序的神秘面纱,并探索两种流行的实现方法。话不多说,开始战斗快速排序的魔法:基......
  • 【字符串匹配算法——BF算法】
    ......