7

caretモデル生成には Rのライブラリを使用しています。earth(別名 MARS) モデルを生成したいのですがdegree、このモデル生成のパラメーターを指定したいと考えています。ドキュメント(11 ページ)によると、earthこのメソッドはこのパラメーターをサポートしています。

パラメータを指定すると、次のエラー メッセージが表示されます。

> library(caret)
> data(trees)
> train(Volume~Girth+Height, data=trees, method='earth', degree=1)
Error in { : 
  task 1 failed - "formal argument "degree" matched by multiple actual arguments"

degreeパラメータを指定するときにこのエラーを回避するにはどうすればよいですか?

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] earth_3.2-3    plotrix_3.4    plotmo_1.3-1   leaps_2.9      caret_5.15-023
 [6] foreach_1.4.0  cluster_1.14.2 reshape_0.8.4  plyr_1.7.1     lattice_0.20-6

loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_2.15.0 grid_2.15.0     iterators_1.0.6
[5] tools_2.15.0   
4

2 に答える 2

12

私は常に、キャレット内の関数が有用であると同時にやや気が狂うものであることに気づきました。これが何が起こっているかです。

earthに引数を介して に...引数を渡そうとしていますtrain。のドキュメントにtrainは、その引数に関する次の説明が含まれています。

分類または回帰ルーチン (randomForest など) に渡される引数。チューニング パラメータの値がここに渡されると、エラーが発生します。

チューニングパラメータ、え?下にスクロールして、各モデル タイプの調整パラメータの公式リストを調べると、 、 、およびであるearthことがわかります。degreenprune

したがって、ここでの問題は、train調整パラメーターに沿って一部のグリッド検索を自動化するように設計されており、引数は、それらの調整パラメーターを除い...てモデル フィッティング関数にさらに引数を渡すために使用されることです。

チューニング パラメータを設定する場合は、次のように他の引数を使用する必要があります。

train(Volume~Girth+Height, data=trees, method='earth',
      tuneGrid = data.frame(.degree = 1,.nprune = 5))

列の先頭にピリオドが付けられていることに注意してください。earthまた、 forのデフォルト値が でnpruneあるためNULL、この方法でデフォルト値のみを渡すことができるかどうかわからないこともイライラします。(一般に、NULLデータ フレームに設定すると、単純に削除されます。)

于 2012-05-08T15:56:23.380 に答える
9

私はそれを行う方法を見つけました.joranは私を正しい方向に導きました:

トレーニング グリッドを生成する新しい関数を作成します。lenこの関数は、 と の 2 つのパラメーターを受け入れる必要がありますdata。元のトレーニング グリッドを取得するには、パッケージcreateGridによって提供されるメソッドを呼び出すことができます。caretその後、必要に応じてグリッドを変更できます。たとえば、npruneパラメーターを変更せずにdegree1 から 5 まで追加するには、次のコードを使用します。

  createMARSGrid <- function(len, data) {
      g = createGrid("earth", len, data)
      g = expand.grid(.nprune=g$.nprune, .degree=seq(1,5))
      return(g)
  }   

次に、次のように呼び出します。

train(formula, data=data, method='earth', tuneGrid = createMARSGrid)
于 2012-05-17T17:13:06.030 に答える