Python:客运量与货运量预测-BP神经网络

本文介绍了如何使用Python实现BP神经网络进行客运量与货运量的预测。通过设置一层隐含层,计算正向传播与反向传播过程,利用sigmoid激活函数,并基于损失函数进行权重更新。尽管示例中的模型预测效果不理想,但强调了初始化参数的重要性,建议多次训练以获取更优模型。给出了两次不同的模型预测结果,展示了模型的敏感性。
摘要由CSDN通过智能技术生成

基于Python实现BP神经网络,参考资料会放在最后。
BP神经网络误差向量推导过程用到了微分链式求导
了解整个BP神经网络运行原理之后,就挺简单的

像一般神经网络一样,BP神经网络先进行FP传导即正向传导,案例中只设置了一层隐含层,所以参数层有两层:w1,b1;w2,b2;W参数矩阵的行列:行为输出层的神经元个数,列是输入层的神经元个数。

隐含层的结果:O1=sigmoid(a1)=sigmoid(w1.x.T+b1),隐含层使用了sigmoid激活函数
输出结果:O2=a2=W2*O1+b2 ,最后一层没有用激活函数

损失函数cost=1/2(O2-y)^2 ,括号里面为预测值减实际值得平方,而我们经常使用的误差项err=y-O2,两者的区别,其实err也可以等O2-y,所以err形式决定我们后面的err是否需要加负号,因为cost对O2的偏导数为(O2-y),则err与(O2-y)之间关系换算需要特别注意。

我们这里定义err=y-O2;

损失函数对Wi求偏导即梯度值,求导过程用到微分链式求导
下图可以看到梯度等于误差项 乘以 上一层的输入值,对于最后一层的Wi我们可以得到等于-(y-Oi)Oi-1.T,即-errOi-1.T。最后一层我们没有对a2进行激活函数转换,所以没有激活函数关于a2部分的求导,即O2对a2求导是1,所以忽略.
在这里插入图片描述

损失函数对ai进行求偏导则可以得到误差向量,求导过程用到微分链式求导:

在这里插入图片描述
这里可以看出不同层误差之间的关系,所以通过误差反向传递,更新wi参数,不断的FP,BP循环,直到MSE达到指定阈值则停止拟合。

下面给出整个项目案例代码,这里说明一点,w1是随机数,所以重新跑一次的时候,MSE学习图会表现的不一样。这里是设置迭代60000次

import numpy as np
import  pandas as pd
import matplotlib as mpl
import  matplotlib.pyplot as  plt
from sklearn.preprocessing import  MinMaxScaler

df=pd.read_csv('traffic_data.csv',encoding='GBK')
print(df.head)

x=df[['人口数','机动车数','公路面积']]
y=df[['客运量','货运量']]

print(x)
print(y)

#对数据进行最大最小值归一化
x_scaler=MinMaxScaler(feature_range=(-1,1))
y_scaler=MinMaxScaler(feature_range=(-1,1))

x=x_scaler.fit_transform(x)
y=y_scaler.fit_transform(y)

#对样本进行转置,矩阵运算
sample_in=x.T
sample_out=y.T

#BP神经网络网络参数
max
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值