R 语言机器学习—快速实现BP神经网络
Posted 南大地灾敢死队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R 语言机器学习—快速实现BP神经网络相关的知识,希望对你有一定的参考价值。
BP神经网络(BPNN)的全称是:误差反向传播神经网络(Error back propagation training neural network)。它具有任意复杂的模式分类能力和优良的多维函数的映射能力。
BP神经网络的应用
BP神经网络是一种前馈型神经网络,理论上它可以拟合任意的非线性函数。所以适用于很多复杂的应用场景。比如:
•分类:图像识别、文本分类、语言识别等
•回归:市场价格预测等
R 语言的快速实现
需要用到的R包主要有:nnet 和NeuralNetTools
•nnet包实现了前馈神经网络和多项对数线性模型,多用来构建单隐层的前馈型神经网络
1. 安装和导入nnet包
•安装:我们可以在Rstudio里面直接进行nnet 的安装
第一步:点击第一栏上的Tools,然后在弹出的选项中点击Install Packages
第二步:在Packages那一栏内输入包的名字:nnet(注意大小写),在弹出的选项中选中nnet,然后点击下面的Install就好了
第三步:导入nnet包
library(nnet)
2. 设置运行路径和读取输入数据
•设置运行路径
###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
3. 训练数据处理和构建模型
• 用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并训练模型参数简要介绍:weight decay(权值衰减)的使用既不是为了提高你所说的收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大
##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) # 输出因子重要性图
4. 预测
•在训练完了模型之后使用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编程相比于其他语言要简单很多,上手也更快。
以上是关于R 语言机器学习—快速实现BP神经网络的主要内容,如果未能解决你的问题,请参考以下文章