人工神经网络
神经网络起源于生物学中有关神经元的研究。
神经元通过控制自身的神经突触接受信息。
这些神经突出的连接,又被认为是大脑行为的关键因素。
所谓人工神经网络,就是使用一套函数模型模拟这些相互连接的神经元。
他既可以对连续性目标变量做回归分析,也可以对分类型目标变量做分类分析。
1、神经元
主要分为权重系数,加法器,激活函数3个部分。
1)带有权重系数wj的突触。连接到输入值xj
2)加法器将所有的输入做加,并与一个偏差bias求和,记为
可以把偏差bias看作是输入为x0,权重为1的系数w0之积
3)激活函数g(也称为压缩函数)并把g(v)作为神经元中的输出,该函数必须是单调函数。
常见的激活函数
阶跃函数(也称为阈值型函数)
Logistic函数(也称Sigmod型函数)
#激活函数为Logistic函数的神经元代码
ann.cell <- function(x,w,bias){
v <- sum(w*x)+bias
o <- 1/(1+exp(-v))
o
}
2、两层网络
人工神经网络可分为输入层、隐藏层和输出层3个部分。
3、反向传播算法
1)设置神经网络的基本结构和初始参数
【1】隐藏层的层数和内部的神经元数目
【2】隐藏层和输出层内所有神经元的加权系数及偏差值
【3】所有神经元使用的激活函数
2)把样本1中的自变量数据通过输入层正向输入至初始网络模型ANNinit中, 并计算神经网络的输出yout(正向传播)
3)计算样本1中目标变量与yout的误差,并通过输出层反向输入初始网络模型中,通过计算误差的传播来调整各个神经元中加权系数和偏差量的取值(反向传播),
最后 得到由样本1 修正后的神经网络模型ANN1
4)重复步骤。逐次使用训练集中的样本数据修正神经网络模型中的参数,最后根据停止学习条件,停止模型的修改过程,并完成算法的建立。注意,训练集数据可以被重复学习,不必由于所有训练集均被遍历而停止学习。
#1、正向传播
#以两层神经元为例,其隐藏层层级数为1,
o.hidden <- 0
for(i in 1:nrow(w.hidden))
{
o.hidden[i] <- ann.cell(x,w.hidden[i,],bias.hidden[i])
}
o.out <- 0
for(i in 1:nrow(w.out))
{
o.out[i] <- ann.cell(o.hidden,w.out[i,],bias.out[i])
}