数据集准备

这里使用一个宏观数据集,因变量是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

多层前馈神经网络实例——R语言相关推荐

  1. 神经网络-多层前馈神经网络

    神经网络-反向传播算法 神经网络-激活函数 神经网络是将许多个神经元按一定的层次结构连接起来的网络结构.不同的层次结构会产出不同类型神经网络,比如前馈神经网络和递归神经网络. 神经元 神经元是神经网络 ...

  2. 什么是多层前馈神经网络,多层前馈神经网络原理

    前馈神经网络.BP神经网络.卷积神经网络的区别与联系 一.计算方法不同1.前馈神经网络:一种最简单的神经网络,各神经元分层排列.每个神经元只与前一层的神经元相连.接收前一层的输出,并输出给下一层.各层 ...

  3. 完整详细的回归分析实例R语言实现(含数据代码)

    目录 问题2.15 (1)画散点图 1.1问题求解 1.1.1输入 1.1.2输出 (2)x{x}x与yyy之间是否大致呈线性关系 (3)用最小二乘估计求回归方程 3.1问题分析 3.2问题求解 3. ...

  4. 前馈神经网络_BP算法+R语言程序运行实例

    前馈神经网络_BP算法+R语言程序运行实例 目录 关于神经网络的介绍 前馈神经网络 应用到机器学习 参数学习 误差反向传播 程序实例(R语言) 前言 今天是小白学习神经网络的第一次博客文章,希望以后的 ...

  5. R语言 BP神经网络

    神经网络是由具有适应性的简单单元组成的广泛进行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所做的交互反应. 人工神经网络对一组输入信号和一组输出信号之间的关系建模,使用的模型来源于人类大脑对 ...

  6. 【Matlab】基于多层前馈网络BP神经网络实现多分类预测(Excel可直接替换数据)

    [Matlab]基于多层前馈网络BP神经网络实现多分类预测(Excel可直接替换数据) 1.算法简介 1.1 算法原理 1.2 算法流程 2.测试数据集 3.替换数据 4.混淆矩阵 5.对比结果 6. ...

  7. 混凝土的强度预测(R语言 超详细完整代码介绍)神经网络+线性回归

    任务背景 在工程领域中,对建筑材料的性能有精确的估计至关重要.这些估计是必需的,以便制定安全准则来管理用于楼宇.桥梁和道路建设中的材料. 估计混泥土的强度是一个特别有趣的挑战.尽管混泥土几乎要用于每一 ...

  8. predict函数 R_学习|R语言做机器学习的常用函数总结

    预测函数:predict() type="prob"判别该量度的昆虫归类为A.B和C的概率:type="response":判别该量度的昆虫的类别: 预测分类的 ...

  9. R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据...

    原文链接:http://tecdat.cn/?p=24152 什么是PCR?(PCR = PCA + MLR)(点击文末"阅读原文"获取完整代码数据). • PCR是处理许多 x ...

最新文章

  1. 【组队学习】一月微信图文索引
  2. 成功解决FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `ar
  3. 牛客题霸 NC2 重排链表
  4. Asp.net MVC 4 异步方法
  5. js判断移动端,pc端,安卓,苹果浏览器的方法
  6. 关于操作 ASP.NET Web API的实例
  7. 如何对第三方数据进行大数据分析
  8. 《城市轨道交通——产业关联理论与应用》读书笔记
  9. FileNet小错误汇总
  10. python123练习六+练习七
  11. 电脑状态栏中,声音图标不见了怎么办?三招帮你找回!
  12. Python—基础篇(三)
  13. lcs问题java_动态规划法(十)最长公共子序列(LCS)问题
  14. python执行pip指令时,提示“You should consider upgrading……”的解决方法
  15. 开发电脑用 Windows 还是 Mac
  16. 凑辣荷丶换怂档屯览破擦丶笛丶北
  17. (Xcode)The run destination * is not valid for Running the scheme ‘*‘.
  18. 奇点临近-人工智能的时代已经来了
  19. ACM 算法 阶段性练习 (比较全面)
  20. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

热门文章

  1. Java | 将图片转换为txt文件
  2. Aurix Tricore TC397定义变量至LMU程序异常的解决办法
  3. 微信看一看内容来源哪里?看一看推荐规则是什么?怎么赚钱?
  4. Halcon学习(一) 初识Halcon HDevelop下载安装
  5. 挖掘机销售业务员如何做好客户接触及拜访工作
  6. NFC天线匹配调试简介1
  7. 低功耗蓝牙BLE之连接事件、连接参数和更新方法(程序解读)
  8. 基于51单片机的无线遥控小车
  9. 警告!中国90%AI初创企业将在两年内落败出局
  10. π122M30代替Si8621AB-B-IS 低功耗,高能效、抗干扰能力好的 双通道数字隔离器解决方案