当前位置:首页 > 预测模型 > 正文

bp神经网络预测模型


一、如何建立bp神经网络预测模型

要建立BP神经网络预测模型,可以按照以下步骤作:

1.提供原始数据

3。 BP网络训练

4.BP网络预测

5.结果分析

现在用一个实际例子来预测某地区2015年和2016年的口数量。

已知某地区2009-2014年口分别为3583、4150、5062、4628、5270、5340万

[2015,5128.631704710423946380615234375]

[2016,5100.5797325642779469490051269531]

代码和图形如下。


二、BP神经网络

神经网络非常擅解决各种机器学习问题。 神经网络模型是由许多不同层次组织的逻辑单元组成的网络。

上图表明,工神经网络是一个层次模型,逻辑上可以分为三层:

输入层:输入层接收特征向量x

输出层:输出层产生最终的预测h

隐层:隐层位于输入层和输出层之间,称为隐层,因为它产生的值为作为输入层中使用的样本X的矩阵或输出层中使用的标签矩阵y不直接可见。

下面提供了一些符号来帮助描述模型:

!$a^{(j)}_{i}$表示第i个活单元到第j层。 !$\theta^{(j)}$表示从第j层映射到第j+1层时的权重矩阵,例如!$\theta^{(1)}$表示从第1层到第2层的映射层权重。 其大小为:以第j+1层活单元数为行数、第j层活单元数加1为列数的矩阵。 例如:上图神经网络中!$\theta^{(1)}$的小为3*4。

对于上图所示的模型,活单元和输出表示为:

!$a^{(2)}_{1}=g(\θ^{(1)}_{10}x_0+\theta^{(1)}_{11}x_1+\theta^{(1)}_{12}x_2+\theta^{(1)}_{13}x_3)$

!$a^{(2)}_{2}=g(\theta^{(1)}_{20}x_0+\theta^{(1)}_{21}x_1+\theta^{(1)}_{22}x_2+\theta^{(1)}_{23}x_3)$

!$a^{(2)}_{3}=g(\theta^{(1)}_{30}x_0+\theta^{(1)}_{31}x_1+\theta^{(1)}_{32}x_2+\theta^{(1)}_{33}x_3)$

!$h_{\theta}{(x)}=g(\theta^{(2)}_{10}a^{2}_{0}+\theta^{(2)}_{11}a^{2}_{1}+\theta^{(2)}_{12}a^{2}_{2}+\theta^{(2)}_{13}a^{2}_{3})$

接下来我用向量化的方法以上面的神经网络为例,尝试计算第二层的值:

对于多类分类问题:

我们可以在两种情况下定义神经网络的分类:有两种情况类分类和多类分类分类。

二类分类:!$S_{L}=0,y=0,y=1$

2)$

在神经网络中,我们可以有很多输出变量,our!$h_{\theta};{(x)}$是K维度的向量,而我们训练集中的因变量也是同维度的向量,所以我们的成本函数会比逻辑回归更复杂,即:$h_{\!theta}{(x)}\inR^{K}(h_{\theta}{(x)})_{i}=i^{th}输出$

我们希望通过代价函数来观察算法的预测结果与真实情况的误差有多大。 唯一的区别是,对于每一行特征,基本上,我们可以使用循环来预测每一行特征的K个不同结果,然后使用循环在K个预测中选择概率最高的一个,并将其与y中的当前数据。

正则化项就是排除各层后各层矩阵的和!$\theta_0$。 最里面的循环j循环遍历所有行(由+1层中活单元的数量决定),i循环循环遍历所有列,由该层(层!$s_l$)中活单元的数量决定。 即:!$h_{\theta}{(x)}$与真实值之间的距离是每个类的每个样本乘积之和,参数调整的偏差项处理所有参数的平方和。

由于神经网络允许有多个隐层,即每一层的神经元都会产生预测,因此传统回归问题的梯度下降法不能直接用于最小化!$J(\theta)$,并且必须逐层考虑预测误差并逐层优化。 为此,在多层神经网络中,采用反向传播算法来优化预测,首先将每一层的预测误差定义为一个向量!$δ^{(l)}$

训练过程:

当在更复杂的模型(比如神经网络)上使用梯度下降算法时,可能会出现一些细微的错误,这意味着虽然成本看起来在下降,最终的结果可能不是最优解。

为了避免此类问题,我们采用了一种称为数值梯度检查(NumericalGradientChecking)的方法。 该方法的思想是通过评估梯度的值来检查我们计算的导数的值是否真的是我们正在寻找的值。

估计梯度的方法是沿着成本函数的切线方向选择两个非常接近的点,然后对这两个点进行平均来估计梯度。 也就是说,对于一个具体的,我们计算!$\theta-\epsilon$和!$\theta+\epsilon$中的cost值(这是一个很小的值,通常选择0.001),然后找到这两个cost。 平均值,用于估计!$\theta$中的成本值。

当!$\theta$是向量时,我们需要测试偏导数。 由于成本函数的偏导数测试只测试其中一个参数的变化,因此下面是只对!$\theta_1$进行测试的例子:

如果上式成立,则证明网络中的BP算法有效,此时关闭梯度验证算法(因为梯度计算的近似效率太慢)并继续网络训练过程。