2016-10-25 4 views
3

매개 변수 조정 중에 만들어진 모든 모델을 저장할 수 있는지 여부를 묻고 싶습니다. tuneParams 기능. 모든 하이퍼 매개 변수 집합에 대한 교차 유효성 검사에서 모델을 저장하고 싶습니다.R mlr 패키지 - 매개 변수 조정에서 모든 모델을 저장할 수 있습니까?

내가 모두 resamplebenchmark 기능 models 매개 변수가 있음을 볼 수 있지만 내가 tuneParams에서 하나 유사한 기능을 찾을 수 없습니다 내가 정말 새로운 해요 (다른 기능을 사용하여이 동작을 모방하는 방법을 알아낼 질수 mlr).

이 방법이 있습니까?

추신 : 나는 그것이 미친 듯이 들리 겠지만, 내부 검증을 위해 필요하다고 생각합니다.

PS2 불행히도 "mlr"태그가 아직없는 것 같아요. 작성하기에 충분한 담당자가 없습니다.

답변

3

나는 더 짧은 해결책이 있다고 생각하지만 다음은 그렇게 해킹되지 않습니다. 우리는 래퍼 (wrapper)를 사용하여 모델을 저장함으로써 글로벌 환경의 목록에 저장할 수 있습니다. 또는 해당 라인을보다 정교한 것으로 변경하여 하드 디스크에 저장할 수 있습니다. 모델이 상당히 커질 수 있기 때문에 이것은 가치가 있습니다.

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