BP神经网络模拟正弦曲线归一化案例解析

版权申诉
0 下载量 40 浏览量 更新于2024-10-13 1 收藏 1KB ZIP 举报
资源摘要信息:"BP神经网络简单应用案例分析" 知识点一:BP神经网络概述 BP神经网络,即反向传播神经网络(Back Propagation Neural Network),是一种按照误差反向传播训练的多层前馈神经网络。它是目前最常用的神经网络模型之一,特别适合处理复杂的非线性问题。BP神经网络的核心思想是通过调整网络中的权重和偏置,使得网络输出误差最小化。在学习过程中,BP算法采用梯度下降法不断修正网络参数,直至满足预定的学习精度或完成预定的学习次数。 知识点二:BP神经网络的基本结构 BP神经网络的基本结构通常包括输入层、隐藏层(可以有多个)和输出层。输入层负责接收外部输入信号,隐藏层负责特征提取和信息处理,输出层负责输出最终结果。每一层由若干个神经元构成,神经元之间通过权值连接。在BP神经网络中,非线性激活函数被广泛应用于隐藏层中,以增强网络的非线性映射能力。 知识点三:归一化数据处理 在使用BP神经网络处理数据之前,通常需要对输入数据进行归一化处理。归一化是将数据按比例缩放,使之落入一个小的特定区间,如[0,1]或[-1,1]。常见的归一化方法有最小-最大归一化、Z分数标准化等。归一化处理有助于加快神经网络的收敛速度,防止网络训练过程中出现梯度消失或梯度爆炸的问题,从而提高学习效率和模型的泛化能力。 知识点四:模拟正弦曲线的实现 利用BP神经网络模拟正弦曲线是一个基础的网络训练和测试案例。在这个案例中,首先需要准备一组正弦波形的数据,可以是正弦函数的样本点,如sin(x)在一定区间内的值。然后,将这些数据进行归一化处理,作为神经网络的训练样本。网络的设计需要合理选择隐藏层的神经元数量,以便网络能够学习到数据中的规律并准确地模拟出正弦曲线的形态。通过迭代学习,BP神经网络最终能够输出与正弦函数相似的曲线。 知识点五:社会云平台(socialcld) 尽管在标题和描述中并未详细说明社会云平台(socialcld)的具体作用,但从命名中可以推测,它可能是一个用于开发、测试或者部署BP神经网络的社会化云服务平台。云平台提供了计算资源、存储资源和网络资源的按需使用,用户可以在这样的平台上开发自己的机器学习或神经网络应用。社会云平台的优势在于能够简化IT基础设施的搭建过程,降低开发和部署成本,同时通过网络连接共享资源,提供更强大的数据处理能力。 知识点六:BP神经网络训练过程 BP神经网络的训练过程主要包含两个阶段:前向传播和反向传播。在前向传播阶段,输入数据经过网络从输入层到输出层逐层传递,每一层的神经元通过加权和激活函数计算后,将结果传递给下一层。如果输出层的输出与目标输出不符,网络将转入反向传播阶段。在反向传播阶段,计算输出误差的梯度,并按照误差逆传播的方式逐层修正网络权重和偏置,直至误差达到最小或达到预定的训练轮数。 知识点七:编程语言和开发环境 文件名"BP_test02.m"暗示了该BP神经网络案例是用Matlab语言编写的。Matlab是一种广泛应用于工程计算和科学计算的高级语言和交互式环境。它具有强大的数值计算能力,特别是在矩阵运算和算法开发上。Matlab内置了大量针对不同工程问题的工具箱,包括神经网络工具箱,用户可以利用这些工具箱快速开发、训练和测试神经网络模型。因此,Matlab成为在学术界和工业界进行人工智能、机器学习和深度学习研究的重要工具之一。

import numpy as np import pandas as pd import matplotlib.pyplot as plt import BPNN from sklearn import metrics from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error #导入必要的库 df1=pd.read_excel(r'D:\Users\Desktop\大数据\44.xls',0) df1=df1.iloc[:,:] #进行数据归一化 from sklearn import preprocessing min_max_scaler = preprocessing.MinMaxScaler() df0=min_max_scaler.fit_transform(df1) df = pd.DataFrame(df0, columns=df1.columns) x=df.iloc[:,:4] y=df.iloc[:,-1] #划分训练集测试集 cut=4#取最后cut=30天为测试集 x_train, x_test=x.iloc[4:],x.iloc[:4]#列表的切片操作,X.iloc[0:2400,0:7]即为1-2400行,1-7列 y_train, y_test=y.iloc[4:],y.iloc[:4] x_train, x_test=x_train.values, x_test.values y_train, y_test=y_train.values, y_test.values #神经网络搭建 bp1 = BPNN.BPNNRegression([4, 16, 1]) train_data=[[sx.reshape(4,1),sy.reshape(1,1)] for sx,sy in zip(x_train,y_train)] test_data = [np.reshape(sx,(4,1))for sx in x_test] #神经网络训练 bp1.MSGD(train_data, 1000, len(train_data), 0.2) #神经网络预测 y_predict=bp1.predict(test_data) y_pre = np.array(y_predict) # 列表转数组 y_pre=y_pre.reshape(4,1) y_pre=y_pre[:,0] #画图 #展示在测试集上的表现 draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_pre)],axis=1); draw.iloc[:,0].plot(figsize=(12,6)) draw.iloc[:,1].plot(figsize=(12,6)) plt.legend(('real', 'predict'),loc='upper right',fontsize='15') plt.title("Test Data",fontsize='30') #添加标题 #输出精度指标 print('测试集上的MAE/MSE') print(mean_absolute_error(y_pre, y_test)) print(mean_squared_error(y_pre, y_test) ) mape = np.mean(np.abs((y_pre-y_test)/(y_test)))*100 print('=============mape==============') print(mape,'%') # 画出真实数据和预测数据的对比曲线图 print("R2 = ",metrics.r2_score(y_test, y_pre)) # R2 运行上述程序。在下面这一步中draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_pre)],axis=1);我需要将归一化的数据变成真实值,输出对比图,该怎么修改程序

2023-06-12 上传