神经网络是由具有适应性的简单单元组成的广泛进行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所做的交互反应。

人工神经网络对一组输入信号和一组输出信号之间的关系建模,使用的模型来源于人类大脑对来自感觉输入的刺激是如何反应理解的。就像大脑使用一个称为神经元的相互连接的细胞网络来创建一个巨大的并行处理器,人工神经网络使用人工神经元或者节点的网络来解决学习问题。人工神经网络可以用在数据的分类、预测,甚至是无监督的模式识别。其中BP神经网络广泛使用,BP神经网络可以逼近任意连续函数,具有很强的非线性映射能力,而且网络的中间层数、各层的处理单元数及网络的学习系数等参数可根据具体情况设定,灵活性很大。


R语言实现


1. r语言含有神经网络包

R语言中已经有许多用于神经网络的package。例如nnet、AMORE以及neuralnet,

nnet提供了最常见的前馈反向传播神经网络算法。

AMORE包则更进一步提供了更为丰富的控制参数,并可以增加多个隐藏层。

neuralnet包的改进在于提供了弹性反向传播算法和更多的激活函数形式。


但以上各包均围绕着BP网络,并未涉及到神经网络中的其它拓扑结构和网络模型。而新出炉的RSNNS包则在这方面有了极大的扩充。



2. BP神经网络(多层前馈神经网络)

nnet包中nnet函数中参数的说明:


x:矩阵x值的例子或数据框

Y:矩阵或数据框的例子目标值

size:隐藏层单位数目 

linout:切换线性输出单位 

nnet包中的nnet(x, y, size,rang, decay, maxit, skip, Hess, trace)函数:单层的前向神经网络模型。

size神经网络隐藏层的神经元个数;

rang初始随机权值[-rang, rang];

decay经元输入权重的一个修改偏正参数,表明权值是递减的(可以防止过拟合);

maxit最大反馈迭代次数;

skip是否允许跳过隐藏层;

Hess是否输出Hessian值;

trace指出是否要最优化。


对分类数据的分类以及预测

# 神经网络
  library(nnet);library(caret)
  
  # 加载数据
  car <- read.table('./data/car.data', sep = ',')
  colnames(car) <- c('buy', 'main', 'doors', 'capacity', 'lug_boot', 'safety', 'accept')
  
  # 数据集分为测试和训练
  ind <- createDataPartition(car$accept, times = 1, p = 0.75, list = FALSE)
  carTR <- car[ind, ]
  carTE <- car[-ind, ]
  
  # BP神经网络
  nnet.model <- nnet(accept ~ ., data = carTR, size = 3, maxit = 300,  rang = 0.1, decay = 5e-4)
  # 构建混淆矩阵
  nnet.0 <- table(actual = carTR$accept, predict = predict(nnet.model, data = carTR, type = 'class')) # 分类数据预测
  # 计算误差率
  1 - sum(diag(nnet.0))/sum(nnet.0)