多层前馈神经网络实例——R语言

本文通过一个具体的数据集,详细介绍了如何进行数据预处理、构建及训练神经网络模型,并使用相关系数评估了模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据集准备

这里使用一个宏观数据集,因变量是Y,一共有六个自变量,共计228条记录。数量有点少,不过凑合着用用吧。

> head(data_csdn)
         Y       X1       X2       X3       X4       X5        X6
1 5.361104 4.531524 9.392412 4.593098 7.886871 3.018472 2.8848007
2 5.284320 4.550292 9.455950 4.592085 7.839289 3.739573 0.7419373
3 5.678670 4.560487 9.336268 4.587006 7.784515 4.295924 2.1972246
4 5.657459 4.552824 9.325899 4.582925 7.765060 4.628887 2.2082744
5 5.676377 4.542443 9.295508 4.582925 7.768110 4.934690 2.1860513
6 5.701146 4.533030 9.294773 4.583947 7.795153 5.223917 2.2082744
> nrow(data_csdn)
[1] 228

探索性数据分析

由于多层前馈神经网络需要输入值为0附近小范围的数据,因此,我们需要进行一下探索性数据分析,以便于判断是否进行中心化处理。

> summary(data_csdn)
       Y               X1              X2               X3              X4               X5              X6        
 Min.   :5.284   Min.   :4.405   Min.   : 9.295   Min.   :4.583   Min.   : 7.765   Min.   :2.908   Min.   :-1.470  
 1st Qu.:6.630   1st Qu.:4.506   1st Qu.: 9.820   1st Qu.:4.613   1st Qu.: 8.341   1st Qu.:5.275   1st Qu.: 2.089  
 Median :7.557   Median :4.586   Median :10.344   Median :4.623   Median : 9.093   Median :5.956   Median : 2.481  
 Mean   :7.307   Mean   :4.611   Mean   :10.345   Mean   :4.625   Mean   : 9.086   Mean   :5.801   Mean   : 2.381  
 3rd Qu.:8.068   3rd Qu.:4.733   3rd Qu.:10.924   3rd Qu.:4.635   3rd Qu.: 9.844   3rd Qu.:6.494   3rd Qu.: 2.773  
 Max.   :8.316   Max.   :4.875   Max.   :11.369   Max.   :4.689   Max.   :10.455   Max.   :7.178   Max.   : 3.347  

我们发现,Y、X2等特征范围比较大,因此需要进行中心化(标准化)处理。
有两种中心化(标准化)处理方法:

  • (数据-均值)/标准差
    这个方法可以用R里面的scale()函数来实现。
#center:是否中心化
#scale:是否标准化
scale(x, center = TRUE, scale = TRUE)
  • (数据-min)/(max-min)
    这个暂时没有现成的方法,可以自定义函数来实现。
normalize<-function(x){
  return((x-min(x))/(max(x)-min(x)))
}
data_normal<-as.data.frame(lapply(data_csdn,normalize)) 

现在我们来看看是否达到了我们的目的:

> summary(data_normal)
       Y                X1               X2               X3               X4               X5               X6        
 Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
 1st Qu.:0.4438   1st Qu.:0.2147   1st Qu.:0.2534   1st Qu.:0.2859   1st Qu.:0.2140   1st Qu.:0.5543   1st Qu.:0.7387  
 Median :0.7496   Median :0.3839   Median :0.5060   Median :0.3784   Median :0.4935   Median :0.7138   Median :0.8201  
 Mean   :0.6671   Mean   :0.4376   Mean   :0.5062   Mean   :0.3970   Mean   :0.4910   Mean   :0.6774   Mean   :0.7995  
 3rd Qu.:0.9180   3rd Qu.:0.6967   3rd Qu.:0.7855   3rd Qu.:0.4903   3rd Qu.:0.7727   3rd Qu.:0.8399   3rd Qu.:0.8807  
 Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  

各个特征值的max和min均为0和1,OK!

划分训练集和测试集

考虑到在划分过程中,测试集和训练集都要具有对原始集的代表性,所以这里使用随机抽样的原理进行划分:

set.seed(33333)
data_rand<-data_normal[order(runif(nrow(data_normal))),]
data_train<-data_rand[1:205,]
data_test<-data_rand[206:228,]

训练模型

简单介绍三个R中可以做神经网络的package:

  1. neuralnet:常用,本文只用的就是这个;
  2. nnet:R原生库自带,最常用;
  3. RSNNS:功能最强大,学习成本也最高。

使用前安装加载:

install.packages("neuralnet")
library(neuralnet)

训练一个仅含一个hidden layer的神经网络:

neuromodel<-neuralnet(Y~X1+X2+X3+X4+X5+X6,data=data_train,hidden=1)

神经网络可视化:

plot(neuromodel)

这里写图片描述
图中,圈中有1代表的是偏差项,从输入层到隐藏层的每个箭头上的数字表示的是权重,图下面的Error表示的误差平方和,可以用来评估模型优劣,step是训练的步数。

模型性能评估

这里使用相关系数来评估系统性能:

neuropredict<-compute(neuromodel,data_test[,-1])
neuroresult<-neuropredict$net.result
cor(neuroresult,data_test$Y)
> cor(neuroresult,data_test$Y)
             [,1]
[1,] 0.9873125732

可以看到,cor超过0.9,说明性能很出色。


by Yuhua20180531

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值