一般地,BP网络的输入变量即为待分析系统的内生变量(影响因子或自变量)数,一般根据专业知识确定
若输入变量较多,一般可通过主成份分析方法压减输入变量,也可根据剔除某一变量引起的系统误差与原系统误差的比值的大小来压减输入变量
输出变量即为系统待分析的外生变量(系统性能指标或因变量),可以是一个,也可以是多个
一般将一个具有多个输出的网络模型转化为多个具有一个输出的网络模型效果会更好,训练也更方便
输入/输出变量的确定及其数据的预处理由于BP神经网络的隐层一般采用Sigmoid(S形的)转换函数,为提高训练速度和灵敏性以及有效避开Sigmoid函数的饱和区,一般要求输入数据的值在0~1之间
因此,要对输入数据进行预处理
一般要求对不同变量分别进行预处理,也可以对类似性质的变量进行统一的预处理
如果输出层节点也采用Sigmoid转换函数,输出变量也必须作相应的预处理,否则,输出变量也可以不做预处理
预处理的方法有多种多样,各文献采用的公式也不尽相同
但必须注意的是,预处理的数据训练完成后,网络输出的结果要进行反变换才能得到实际值
再者,为保证建立的模型具有一定的外推能力,最好使数据预处理后的值在0
一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向
Hornik等早已证明:若输入层和输出层采用线性转换函数,隐层采用Sigmoid转换函数,则含一个隐层的MLP网络能够以任意精度逼近任何有理函数
显然,这是一个存在性结论
在设计BP网络时可参考这一点,应优先考虑3层BP网络(即有1个隐层)
一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现
对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型