2016-04-22 4 views
4

私はCARTモデルを構築しており、rpart - CPとMaxdepthの2つのパラメータを調整しようとしています。キャレットパッケージは、一度に一つのパラメータのためにうまく機能しているの両方が使用されている場合はエラーを投げ続け、私はCaretパッケージを使用して複数のパラメータをチューニングする方法は?

library(caret) 
data(iris) 
tc <- trainControl("cv",10) 
rpart.grid <- expand.grid(cp=seq(0,0.1,0.01), minsplit=c(10,20)) 
train(Petal.Width ~ Petal.Length + Sepal.Width + Sepal.Length, data=iris, method="rpart", 
     trControl=tc, tuneGrid=rpart.grid) 

は、私は次のエラーを取得していた理由を理解することはできませんよ中:

Error in train.default(x, y, weights = w, ...) : 
    The tuning parameter grid should have columns cp 

答えて

4

メソッド "rpart"はcpをチューニングすることしかできません。メソッド "rpart2"はmaxdepthに使用されます。 minsplitやその他のrpartコントロールのチューニングはありません。異なるオプションを調整する場合は、カスタムモデルを作成してこれを考慮に入れることができます。

これを行う方法の詳細については、hereをクリックしてください。列車機能内でrpartコントロールを使用する方法についてはthis answerも読んでください。

6

caretあなたは自分で追加する必要があるので、統合された方法ではできません。

mlrこれは、多くのリサンプリング戦略、調整方法の調整、およびアルゴリズムパラメータのチューニングを可能にする同様の機械学習フレームワークでも試みることができます。 があり、いくつかの異なるevaluation metrics to choose fromがあります。あなたの特定の問題で

、この例を試してみてください。

library(mlr) 
iris.task = classif.task = makeClassifTask(id = "iris-example", data = iris, target = "Species") 
resamp = makeResampleDesc("CV", iters = 10L) 

lrn = makeLearner("classif.rpart") 

control.grid = makeTuneControlGrid() 
#you can pass resolution = N if you want the algorithm to 
#select N tune params given upper and lower bounds to a NumericParam 
#instead of a discrete one 
ps = makeParamSet(
    makeDiscreteParam("cp", values = seq(0,0.1,0.01)), 
    makeDiscreteParam("minsplit", values = c(10,20)) 
) 

#you can also check all the tunable params 
getParamSet(lrn) 

#and the actual tuning, with accuracy as evaluation metric 
res = tuneParams(lrn, task = iris.task, resampling = resamp, control = control.grid, par.set = ps, measures = list(acc,timetrain)) 
opt.grid = as.data.frame(res$opt.path) 
print(opt.grid) 

mlrは非常に汎用性があります:ラッパーアプローチは、1つのチューニング戦略、前処理、フィルタリング及び帰属手順、およびはるかに学習者を融合させることができます。

+1

私は 'mlr'の最初のステップに入っています。おそらく学習者の' lrn'が 'tuneParams'関数で使われるべきでしょう。 –

+1

@EnriquePérezHerreroあなたは絶対に正しいです、頭のおかげで! –

関連する問題