2012-05-08 10 views
5

モデル生成のためにRのcaretライブラリを使用しています。 earth(別名MARS)モデルを生成したいので、このモデル生成にdegreeパラメータを指定します。 documentation(11ページ)によれば、earthメソッドはこのパラメータをサポートしています。キャレット::列車:モデル生成パラメータを指定

パラメータを指定するときに、私は、次のエラーメッセージが表示されます: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 

答えて

7

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

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

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) 
+0

ありがとう@theomega。これは非常に役に立ちます。 'createGrid'と' tuneLength'( 'train'への引数)の' len'との関係は何ですか?また、 'createGrid'が特定のモデルのデータを受け取る必要があるのはなぜですか? ( '?createGrid'はこれについてあまり言及していません) –

+0

新しい質問をしてください。 – theomega

+0

ありがとうtheomega:ここに私の質問があります:http://stackoverflow.com/questions/14839730/caret- errors-with-rf-randomforestのcreategridを使用します。私は 'tuneLength'と' createGrid'のlenパラメータとの間の接続を明確にする答えがまだ不足しています。一緒に使うことはできますか?彼らの関係は何ですか? –

9

私はいつもキャレットで機能が有用とやや腹立たしいの両方を発見しました。ここでは何が起こっているのですか?

earthに引数を渡して、...引数をtrainに渡そうとしています。分類または回帰ルーチン(など ランダムフォレスト)に渡さ

引数:trainのドキュメントには、その引数のこの記述が含まれています。チューニングパラメータの値が であれば、エラーが発生します。

チューニングパラメータ、eh?まあ、スクロールして、各モデルタイプの公式パラメータの公式リストを調べると、earthの場合はdegreenpruneと表示されます。

ので、ここでの問題はtrainがチューニングパラメータに沿って検索するいくつかのグリッドを自動化するために設計されており、...引数は、これらのチューニングパラメータについて以外のモデルフィッティング関数にさらに引数を渡すために使用されるようになっているということです。

あなたがそうのように、他の引数を使用する必要がありますチューニングパラメータを設定する場合:列が有力期間と命名されているか

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

注意を。また、npruneのデフォルト値earthNULLであるため、この方法でデフォルト値のみを渡すことはできません。 (一般的には、データフレームにNULLに物事を設定すると、単純にそれらを削除します。)

+1

感謝を。問題は、「nprune」をデフォルト値に維持するにはどうすればいいですか?私はソースでそれを調べて、デフォルト値がprivate(非呼び出し可能)関数 'marsSeq'を使用して計算されることを知ったので、固定値ではありません。あなたが言ったように、あなたはそれを放置することはできません。 – theomega

+0

私の(そしてあなたの)質問に対する解決策を提供する私の答えを見てください。 – theomega

関連する問題