nnet包提供了最常见的前馈反向传播神经网络算法,AMORE包则更进一步提供了更为丰富的控制参数,并可以增加多个隐藏层。
【例11.6】使用AMORE包构建一个分类DNN。
(1)分离RSNNS包并加载AMORE
<detach("package:RSNNS",unload=TRUE)
<library(AMORE)
(2)建模
绝大部分包的用法都类似于之前看到的。但需注意,AMORE包需要指定输入和输出结点的数量以及隐藏结点。这里使用语句n.neurons=c(6,12,8,1)来实现,第一个数字反映了六个输入属性,第二个和第三个值表示第一和第二隐藏层中神经元的数量,并且在这种情况下最终输出神经元的数量为1。
多数情况下,数据科学家通过最小化训练集的均方差来训练DNN。然而,当出现异常值时,训练得到的模型可能难以捕获生成数据的机制。为此,在构建DNN模型时,希望最小化鲁棒的误差度量。建议使用平均对数平方误差(LMLS)。AMORE软件包中的其他鲁棒选择包括Tao error60的“TAO”以及标准均方误差(LMS),参数方法指定使用的学习方法,而本例选择使用自适应动量梯度下降的方法——ADA-PTgdwm。
(3)数据集
<X<-temp[train,]
<Y<-temp[train,7]
(4)数据拟合
● 训练集拟合
模型运行时,将看到如下的输出:
index.show:1 LMLS 0.239138435481238
index.show:2 LMLS 0.236182280077741
index.show:3 LMLS 0.230675203275236(www.xing528.com)
index.show:4 LMLS 0.222697557309232
index.show:5 LMLS 0.214651839732672
● 测试集拟合
一旦模型开始收敛,立即使用sim算法基于测试样本拟合模型。
<pred<-sign(sim(fit$net,temp[-train,]))
<table(pred,sign(temp[-train,7]),dnn=c("Predicted","Observed"))
Observed
Prdeicted -1 1
-1 71 10
1 17 26
(5)模型部署
通过误差率评估模型:
<error_rate=(1-sum(pred==sign(temp[-train,7]))/124)
<round(error_rate,3)
[1]0.218
总体上,具有动量学习的自适应梯度下降结合鲁棒误差的方法,相对于使用RSNNS包建立的分类DNN有较低的误分类率,其误分类率约为22%。这里的关键是,当建立DNN模型时,要使用不同的包、不同的学习算法、不同的网络架构等。换言之,构建卓越的DNN就是通过实验。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。