- A+
神经网络是深度学习的基础。
本文介绍R做机器学习核心包:nnet
一、nnet包介绍
nnet包实现了前馈神经网络和多项对数线性模型。前馈神经网络是一种常用的神经网络结构,如下图所示。
前馈网络中各个神经元按接受信息的先后分为不同的组。每一组可以看作一个神经层。每一层中的神经元接受前一层神经元的输出,并输出到下一层神经元。整个网络中的信息是朝一个方向传播,没有反向的信息传播。前馈网络可以用一个有向无环路图表示。前馈网络可以看作一个函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。这种网络结构简单,易于实现。前馈网络包括全连接前馈网络和卷积神经网络等
二、nnet包安装和加载
R代码:
- if(!suppressWarnings(require('nnet')))
- {
- install.packages('nnet')
- require('nnet')
- }
三、nnet包应用
第一步:数据获取
- ##预测变量X
- ir <- rbind(iris3[,,1],iris3[,,2],iris3[,,3])
- ##目标变量y
- targets <- class.ind( c(rep("s", 50), rep("c", 50), rep("v", 50)) )
第二步:数据集划分(训练集+验证集)
- set.seed(1234)
- ##70%的数据集作为训练模型
- samp <- c(sample(1:50,35), sample(51:100,35), sample(101:150,35))
- ir.train <- ir[samp,]
- targets.train <- targets[samp,]
- ir.validation <- ir[-samp,]
- targets.validation <- targets[-samp, ]
第三步:模型构建
- ir.nnet <- nnet(ir.train, targets.train, size = 2, rang = 0.1,
- decay = 5e-4, maxit = 200)
结果如下:
- weights: 19
- initial value 80.747493
- iter 10 value 35.797549
- iter 20 value 35.256099
- iter 30 value 35.040425
- iter 40 value 29.509802
- iter 50 value 25.348691
- iter 60 value 24.081465
- iter 70 value 23.873708
- iter 80 value 23.828264
- iter 90 value 23.790097
- iter 100 value 23.753690
- iter 110 value 23.733482
- iter 120 value 17.479635
- iter 130 value 2.655936
- iter 140 value 2.124963
- iter 150 value 1.707239
- iter 160 value 1.289882
- iter 170 value 0.938505
- iter 180 value 0.755850
- iter 190 value 0.698843
- iter 200 value 0.678346
- final value 0.678346
- stopped after 200 iterations
第四步:模型应用
- test.cl <- function(true, pred) {
- true <- max.col(true)
- cres <- max.col(pred)
- table(true, cres)
- }
- test.cl(targets.validation, predict(ir.nnet, ir.validation))
参考资料
1 前馈神经网络:https://nndl.github.io/ch5.pdf
2 nnet函数:https://www.rdocumentation.org/packages/nnet/versions/7.3-12/topics/nnet
作者:JackWang
个人介绍:专注于从数据中学习,努力发掘数据之洞见,积极利用数据之价值。
支付宝打赏
微信打赏
赏