BP神经网络(BPNN)的全称是:误差反向传播神经网络(Error back propagation training neural network)。它具有任意复杂的模式分类能力和优良的多维函数的映射能力。
BP神经网络的应用
BP神经网络是一种前馈型神经网络,理论上它可以拟合任意的非线性函数。所以适用于很多复杂的应用场景。比如:
- 分类:图像识别、文本分类、语言识别等
- 回归:市场价格预测等

标准的三层神经网络结构
安装和导入nnet包
- 安装:我们可以在Rstudio里面直接进行nnet 的安装
第一步:点击第一栏上的Tools,然后在弹出的选项中点击Install Packages

1
第二步:在Packages那一栏内输入包的名字:nnet(注意大小写),在弹出的选项中选中nnet,然后点击下面的Install就好了

2
第三步:导入nnet包
library(nnet)
设置运行路径和读取输入数据
- 设置运行路径
###Set working directory for the training data
setwd("C:/Users/dell/Desktop/BPnn/bp8")
getwd()
- 读取输入数据我们以一个分类任务为例,其中有11个因子:x1~x10,和label:y
###Read the input file
data <- read.csv("BP_8_TT2.csv")
data
# 数据命名
data@names <- c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","y")
data$y <- as.factor(data$y)
# 查看数据
head(data)
str(data)
data
训练数据处理和构建模型
- 用 sample 函数来划分训练、测试数据集
- sample() 函数是用于随机采样的函数,用法如下:
函数模型: sample(x, size, replace = FALSE, prob = NULL)
x :参数为一个向量,其中包含一个以上的元素;也可以为一个整数,如果为整数(N),采样范围为 1:N,包括N本身
size:即采样次数
replace :表示是否重复采样,默认为 FALSE,如果为 TRUE,则表示为放回采样
prob: 参数可以设置 x 中每个元素被 sample 的概率
#设置随机种子
set.seed(1234)
#将数据按照7:3的比例随机划分为训练集和测试集
ind<-sample(2,nrow(data),replace=TRUE,prob=c(0.7,0.3))
traindata<-data[ind==1,]
testdata<-data[ind==2,]
- 构建 BPNN并训练
##Train the bpnn based on output from input
SYbp=nnet(y~x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11,
data=data[ind==1,],
size =10,
rang=0.5,
decay=12e-2,
maxit=2000)
SYbp
print(SYbp)
plotnet(SYbp) #输出网络结构图
garson(SYbp) # 输出因子重要性图

因子重要性图
预测
- 在训练完了模型之后使用predict函数进行预测来得到分为各类的概率
## 预测
net.tr_results <- predict(SYbp,data[ind==1,])
ls(net.tr_results)
print(net.tr_results)
data2=data.frame(traindata$LSI,net.tr_results)
data2
colnames(data2)<-c("y","pro")
- 最后可以用write.csv函数输出我们得到的概率write.csv(results,"all_pro.csv")
这就是一个简单的BP神经网络的R语言实现过程,从代码中可以看出,使用R编程相比于其他语言要简单很多,上手也更快。