如何在nnet中使用size和decay
How to use size and decay in 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)
那么,我有两个问题。首先,这是插入符号使用 nnet 方法的最佳方式吗?其次,我已经阅读了大小和衰减(例如 Purpose of decay parameter in nnet function in R?),但我无法理解如何在实践中使用它们。有人可以帮忙吗?
插入符号的简要说明
Caret 包允许您使用交叉验证(Hold-Out 或 K-fold)或 Bootstrap 训练不同的模型和调整超参数。
有两种不同的方法可以使用 Caret 调整超参数:网格搜索和随机搜索。如果您使用网格搜索(蛮力),您需要根据您的先验知识为每个参数定义网格,或者您可以修复一些参数并迭代其余参数。如果您使用随机搜索,则需要指定调整长度(最大迭代次数),Caret 将对超参数使用随机值,直到停止条件成立。
无论您选择哪种方法,Caret 都会使用每个超参数组合来训练模型并计算性能指标,如下所示:
将初始训练样本分成两个不同的集合:训练和验证(对于 bootstrap 或交叉验证)和 k 组(对于 k 折交叉验证)。
使用训练集训练模型并预测验证集(对于交叉验证保留和 Bootstrap)。或者使用 k-1 个训练集并使用第 k 个训练集进行预测(对于 K 折交叉验证)。
在验证集上,Caret 计算一些性能指标,如 ROC、准确性...
网格搜索完成或调整长度完成后,Caret 使用性能指标 select 根据先前定义的标准(您可以使用 ROC、准确度、灵敏度、RSquared、RMSE....)
您可以创建一些图来了解重采样配置文件并选择最佳模型(记住性能和复杂性)
如果您需要有关 Caret 的更多信息,可以查看 Caret web page
使用 Caret 的神经网络训练过程
当您使用 Caret 训练神经网络 (nnet) 时,您需要指定两个超参数:size 和 decay。 size 是隐藏层的单元数(nnet 适合单个隐藏层神经网络),decay 是避免过拟合的正则化参数。请记住,对于每个 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
我对神经网络世界还很陌生,所以请您理解。我正在生成一些测试,因此我对参数 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)
那么,我有两个问题。首先,这是插入符号使用 nnet 方法的最佳方式吗?其次,我已经阅读了大小和衰减(例如 Purpose of decay parameter in nnet function in R?),但我无法理解如何在实践中使用它们。有人可以帮忙吗?
插入符号的简要说明
Caret 包允许您使用交叉验证(Hold-Out 或 K-fold)或 Bootstrap 训练不同的模型和调整超参数。
有两种不同的方法可以使用 Caret 调整超参数:网格搜索和随机搜索。如果您使用网格搜索(蛮力),您需要根据您的先验知识为每个参数定义网格,或者您可以修复一些参数并迭代其余参数。如果您使用随机搜索,则需要指定调整长度(最大迭代次数),Caret 将对超参数使用随机值,直到停止条件成立。
无论您选择哪种方法,Caret 都会使用每个超参数组合来训练模型并计算性能指标,如下所示:
将初始训练样本分成两个不同的集合:训练和验证(对于 bootstrap 或交叉验证)和 k 组(对于 k 折交叉验证)。
使用训练集训练模型并预测验证集(对于交叉验证保留和 Bootstrap)。或者使用 k-1 个训练集并使用第 k 个训练集进行预测(对于 K 折交叉验证)。
在验证集上,Caret 计算一些性能指标,如 ROC、准确性...
网格搜索完成或调整长度完成后,Caret 使用性能指标 select 根据先前定义的标准(您可以使用 ROC、准确度、灵敏度、RSquared、RMSE....)
您可以创建一些图来了解重采样配置文件并选择最佳模型(记住性能和复杂性)
如果您需要有关 Caret 的更多信息,可以查看 Caret web page
使用 Caret 的神经网络训练过程
当您使用 Caret 训练神经网络 (nnet) 时,您需要指定两个超参数:size 和 decay。 size 是隐藏层的单元数(nnet 适合单个隐藏层神经网络),decay 是避免过拟合的正则化参数。请记住,对于每个 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