如何在nnet中使用大小和衰减

les*_*les 5 r nnet

我对神经网络世界很陌生,所以我要求你理解.我正在生成一些测试,因此我对参数size和问题有疑问decay.我使用caret包和方法nnet.示例数据集:

require(mlbench)
require(caret)
require (nnet)

data(Sonar)
mydata=Sonar[,1:12] 

set.seed(54878)
ctrl = trainControl(method="cv", number=10,returnResamp = "all")
for_train= createDataPartition(mydata$V12, p=.70, list=FALSE) 
my_train=mydata[for_train,]
my_test=mydata[-for_train,] 

t.grid=expand.grid(size=5,decay=0.2)
mymodel = train(V12~ .,data=my_train,method="nnet",metric="Rsquared",trControl=ctrl,tuneGrid=t.grid) 
Run Code Online (Sandbox Code Playgroud)

所以,有两个是我的问题.首先,这是使用nnet方法的最佳方式吗?其次,我已经读过大小和衰减(例如,R中nnet函数中衰减参数的目的)但我无法理解如何在实践中使用它们这里.有人可以帮忙吗?

Jor*_*ana 10

简短的Caret解释

Caret软件包允许您使用交叉验证(Hold-Out或K-fold)或Bootstrap来训练不同的模型和调整超参数.

使用Caret调整超参数有两种不同的方法:网格搜索和随机搜索.如果使用网格搜索(蛮力),则需要根据您的先前知识为每个参数定义网格,或者您可以修复一些参数并迭代剩余参数.如果使用随机搜索,则需要指定调整长度(最大迭代次数),Caret将使用超参数的随机值,直到停止条件成立.

无论您选择何种方法,Caret都将使用每个超参数组合来训练模型并计算性能指标,如下所示:

  1. 将初始训练样本分为两组:训练和验证(用于自举或交叉验证)和k组(用于k折交叉验证).

  2. 使用训练集训练模型并预测验证集(用于交叉验证保持和引导).或者使用k-1训练集并使用第k个训练集进行预测(用于K-fold交叉验证).

  3. 在验证集上,Caret将一些性能指标计算为ROC,Accuracy ......

  4. 一旦网格搜索完成或调整长度完成,Caret使用性能指标根据先前定义的标准选择最佳模型(您可以使用ROC,准确度,敏感度,RSquared,RMSE ....)

  5. 您可以创建一些图来理解重采样配置文件并选择最佳模型(请记住性能和复杂性)

如果您需要有关Caret的更多信息,请查看Caret网页

基于Caret的神经网络训练过程

当您使用Caret训练神经网络(nnet)时,您需要指定两个超参数:大小衰减.大小是隐藏层中的单位数(nnet适合单个隐藏层神经网络),衰减是正则化参数,以避免过度拟合.请记住,对于每个R包,超参数的名称都可以更改.

使用Caret训练神经网络进行分类的示例:

fitControl <- trainControl(method = "repeatedcv", 
                           number = 10, 
                           repeats = 5, 
                           classProbs = TRUE, 
                           summaryFunction = twoClassSummary)

nnetGrid <-  expand.grid(size = seq(from = 1, to = 10, by = 1),
                        decay = seq(from = 0.1, to = 0.5, by = 0.1))

nnetFit <- train(Label ~ ., 
                 data = Training[, ],
                 method = "nnet",
                 metric = "ROC",
                 trControl = fitControl,
                 tuneGrid = nnetGrid,
                 verbose = FALSE)
Run Code Online (Sandbox Code Playgroud)

最后,您可以制作一些图来了解重采样结果.以下图是从GBM培训过程生成的

使用Caret的GBM培训流程

  • 我会尝试以下方法: `nnet_grid &lt;- Expand.grid(.decay = c(0.5, 0.1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7 ), .size = c(3, 5, 10, 20))` 那么你可以根据结果尝试其他参数。0.1 到 0.5 之间的衰减范围是一个非常小的参数空间。 (2认同)