web-dev-qa-db-ja.com

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メソッドを使用する最良の方法ですか?2番目に、サイズと減衰について読みました(例 Rのnnet関数の減衰パラメータの目的 )。ここで実際にそれらを使用する方法を理解してください。誰か助けてもらえますか?

6
les

キャレットの簡単な説明

Caretパッケージでは、クロス検証(ホールドアウトまたはKフォールド)またはブートストラップを使用して、さまざまなモデルをトレーニングし、ハイパーパラメーターを調整できます。

キャレットを使用してハイパーパラメーターを調整するには、グリッド検索とランダム検索の2つの方法があります。グリッド検索(ブルートフォース)を使用する場合は、事前の知識に従ってすべてのパラメーターのグリッドを定義する必要があります。そうしないと、一部のパラメーターを修正して残りのパラメーターを繰り返すことができます。ランダム検索を使用する場合、チューニングの長さ(最大反復回数)を指定する必要があり、キャレットは停止基準が満たされるまでハイパーパラメーターにランダム値を使用します。

選択した方法に関係なく、Caretはハイパーパラメータの各組み合わせを使用して、次のようにモデルをトレーニングし、パフォーマンスメトリックを計算します。

  1. 最初のトレーニングサンプルを2つの異なるセットに分割します。トレーニングと検証(bootstrapまたは相互検証の場合)とkセット(k分割相互検証の場合)です。

  2. トレーニングセットを使用してモデルをトレーニングし、検証セットを予測します(相互検証ホールドアウトおよびブートストラップの場合)。または、k-1トレーニングセットを使用して、k番目のトレーニングセットを使用して予測します(K分割交差検証の場合)。

  3. 検証セットでは、CaretはいくつかのパフォーマンスメトリックをROC、精度...として計算します。

  4. グリッド検索が完了するかチューニング長が完了すると、キャレットはパフォーマンスメトリックを使用して、以前に定義された基準に従って最適なモデルを選択します(ROC、精度、感度、RSquared、RMSE ...を使用できます)。

  5. いくつかのプロットを作成して、リサンプリングプロファイルを理解し、最適なモデルを選択できます(パフォーマンスと複雑さを考慮してください)。

caretに関する詳細情報が必要な場合は、 Caret Webページ を確認できます。

キャレットを使用したニューラルネットワークのトレーニングプロセス

Caretを使用してニューラルネットワーク(nnet)をトレーニングする場合、sizeおよびdecayの2つのハイパーパラメーターを指定する必要があります。サイズは非表示層(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トレーニングプロセス

12
Jorge Quintana