2016-10-25 10 views
3

私は、パラメータ調整中に作成されたすべてのモデルを保存することが可能かどうかを尋ねたがっています。 tuneParamsと機能します。私は、すべてのハイパーパラメータセットのクロスバリデーションのあらゆるフォールドからモデルを保存したいと思います。R mlrパッケージ - パラメータチューニングからすべてのモデルを保存できますか?

私は両方resamplebenchmark機能についてmodelsパラメータがあることがわかりますが、私はtuneParamsで一つまたは類似の機能を見つけることができないと私は本当に私は新しいです(他の機能を使用してこの動作を模倣する方法を考え出す傾けますmlr)。

これを行う方法はありますか?

PS私はそれが狂ったように聞こえるかもしれないことは知っていますが、それでも内部検証のために必要です。

PS2残念ながら、まだ「mlr」タグがないようですが、作成するのに十分な担当者がいません。

答えて

3

私はより短い解決策があると思いますが、以下はあまりハッキーではありません。 ラッパーを使用してモデルを保持し、グローバル環境のリストに保存することができます。また、その行をより洗練されたものに変更し、ハードディスクに保存することもできます。モデルがかなり大きくなる可能性があるので、これは価値があるかもしれません。

library(mlr) 

# Define the tuning problem 
ps = makeParamSet(
    makeDiscreteParam("C", values = 2^(-2:2)), 
    makeDiscreteParam("sigma", values = 2^(-2:2)) 
) 
ctrl = makeTuneControlGrid() 
rdesc = makeResampleDesc("Holdout") 
lrn = makeLearner("classif.ksvm") 


# Define a wrapper to save all models that were trained with it 
makeSaveWrapper = function(learner) { 
    mlr:::makeBaseWrapper(
    id = paste0(learner$id, "save", sep = "."), 
    type = learner$type, 
    next.learner = learner, 
    par.set = makeParamSet(), 
    par.vals = list(), 
    learner.subclass = "SaveWrapper", 
    model.subclass = "SaveModel") 
} 

trainLearner.SaveWrapper = function(.learner, .task, .subset, ...) { 
    m = train(.learner$next.learner, task = .task, subset = .subset) 
    stored.models <<- c(stored.models, list(m)) # not very efficient, maybe you want to save on hard disk here? 
    mlr:::makeChainModel(next.model = m, cl = "SaveModel") 
} 

predictLearner.SaveWrapper = function(.learner, .model, .newdata, ...) { 
    NextMethod(.newdata = .newdata) 
} 

stored.models = list() # initialize empty list to store results 
lrn.saver = makeSaveWrapper(lrn) 

res = tuneParams(lrn.saver, task = iris.task, resampling = rdesc, par.set = ps, control = ctrl) 

stored.models[[1]] # the normal mlr trained model 
stored.models[[1]]$learner.model # the underlying model 
getLearnerParVals(stored.models[[1]]$learner) # the hyper parameter settings 
stored.models[[1]]$subset # the indices used to train the model 
+0

すごく感謝しています。私は答えを受け入れるでしょう。本当にきれいに見えます。それはハッキーではありませんが、単純ではありません - あなたはmlrの貢献者かsthですか?あるいは、あなたはこれらのパッケージ深い機能を自分で調べましたか? – Matek

+3

mlr developer;) - すべてのモデルをチューニングopt.pathに保存するオプションを追加することを検討しています。しかし、現時点では、私たちの機能要求リストは本当に大きいです。 –

+0

Thoguht so :)幸運、そしてもう一度ありがとう! – Matek

関連する問題