r - 如何在neet中使用大小和衰减

标签 r nnet

我对神经网络世界很陌生,所以请您谅解。我正在生成一些测试,因此我对参数sizedecay有疑问。我使用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) 

所以,有两个是我的问题。首先,这是使用插入符号使用nnet方法的最佳方法吗?其次,我已经阅读了有关大小和衰减的信息(例如Purpose of decay parameter in nnet function in R?),但在这里我无法理解如何使用它们。有人可以帮忙吗?

最佳答案

插入符号的简要说明

插入包可让您使用交叉验证(保留或K折)或Bootstrap训练不同的模型并调整超参数。

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

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

  • 将初始训练样本分为两组:训练和验证(用于引导或交叉验证)和k套(用于k倍交叉验证)。
  • 使用训练集训练模型并预测验证集(用于交叉验证保持和自举)。或使用k-1个训练集并使用第k个训练集进行预测(用于K折交叉验证)。
  • 在验证集上,Caret会计算一些性能指标,例如ROC,准确性...
  • 一旦网格搜索完成或“音调长度”完成,Caret就会根据先前定义的标准使用性能指标来选择最佳模型(您可以使用ROC,Accuracy,Sensibility,RSquared,RMSE...。)
  • 您可以创建一些图以了解重采样配置文件并选择最佳模型(请牢记性能和复杂性)

  • 如果您需要有关插入符号的更多信息,可以检查Caret web page

    使用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)
    

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

    GBM Training Process using Caret

    关于r - 如何在neet中使用大小和衰减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42417948/

    相关文章:

    r - 如何计算 R 中函数 hist() 结果的密度

    r - 更改 geom_ribbon() 默认路径顺序

    R:将列表转换为 data.frame

    r - 从 4 个或更多向量创建 2 个和 3 个变量的组合

    r - 具有从输入数据生成的美学效果的 ggplot

    r - 使用nnet时出错

    R 脱字符 nnet 停止准则

    r - 如何使用基于 nnet::multinom() 模型的 {ggeffects} 获得预测概率图的置信区间?

    stargazer - 找不到函数 "multinom"nnet 错误 + stargazer 问题