我剛開始嘗試R包mlr,我想知道如果我可以自定義訓練集和測試集。例如,時間序列的所有數據都是訓練集,除了最後一個,最後一個是測試集。這裏是我的例子,如何使用surv預測最後一行數據時如何對resutls進行重新採樣和比較。函數在mlr包中,R?
library(mlr)
library(survival)
data(lung)
myData2 <- lung %>%
select(time,status,age)
myData2$status = (myData2$status == 2)
myTrain <- c(1:(nrow(myData2)-1))
myTest <- nrow(myData2)
肺數據來自生存包。我只使用三個維度:時間,地位和年齡。現在,讓我們假設他們並不意味着病人的年齡和他們能夠存活多久。假設這是一位顧客的墨水購買歷史。年齡= 74意味着該客戶當天購買了74瓶墨水,時間= 306意味着客戶在306天后耗盡墨水。所以,我想用除最後一行以外的所有數據建立一個生存模型。然後,當我得到最後一行的數據,即年齡= 58,這意味着當天客戶購買了58瓶墨水時,我可以按時進行預測。接近177的數字將是一個很好的估計。所以,我的訓練集和測試集是固定的,不需要重新採樣。
此外,我需要更改比較的超參數。這裏是我的代碼:
surv.task <- makeSurvTask(data=myData2,target=c('time','status'))
surv.lrn <- makeLearner("surv.cforest")
ps <- makeParamSet(
makeDiscreteParam('mincriterion',values=c(1.281552,2,3)),
makeDiscreteParam('ntree',values=c(100,200,300))
)
ctrl <- makeTuneControlGrid()
rdesc <- makeResampleDesc('Holdout',split=1,predict='train')
lrn = makeTuneWrapper(surv.lrn,control=ctrl,resampling=rdesc,par.set=ps,
measures = list(setAggregation(cindex,train.mean)))
mod <- train(learner=lrn,task=surv.task,subset=myTrain)
surv.pred <- predict(mod,task=surv.task,subset=myTest)
surv.pred
你可以看到,我在makeResampleDesc
,因爲我有固定的訓練集,並不需要進行重新採樣使用split=1
。在makeTuneWrapper
中的措施對我來說目前沒有意義,因爲我需要自定義我自己的措施。由於固定的數據拆分,當使用不同的超參數時,我不能使用resample
或tuneParams
等函數來獲取測試數據的評估。所以,我的問題是:當訓練集和測試集是固定的,mlr是否可以爲每個超參數提供全面的比較?如果是這樣,該怎麼辦?
順便說一句,看起來像有功能makeFixedHoldoutInstance
這可能可以做到這一點,只是不知道如何使用它。例如,我以這種方式使用makeFixedHoldoutInstance
和我有這樣的錯誤信息:
> f <- makeFixedHoldoutInstance(train.inds=myTrain,test.inds=myTest,size=length(myTrain)+1)
> lrn = makeTuneWrapper(surv.lrn,control=ctrl,resampling=f,par.set=ps)
> resample(learner=lrn,task=surv.task,resampling=f)
[Resample] holdout iter 1: [Tune] Started tuning learner surv.cforest for parameter set:
Type len Def Constr Req Tunable Trafo
mincriterion discrete - - 1.281552,2,3 - TRUE -
ntree discrete - - 100,200,300 - TRUE -
With control class: TuneControlGrid
Imputation value: -0
[Tune-x] 1: mincriterion=1.281552; ntree=100
Error in resample.fun(learner2, task, resampling, measures = measures, :
Size of data set: 227 and resampling instance: 228 differ!
誰能請幫助?
請問您可以添加您使用的軟件包嗎?另外,它似乎是'target = c('DaysDiff','Status')' – loki
我只是使用包mr。版本是2.11 –
是的。謝謝。這是一個錯字。但所有其他的代碼是我使用和困惑。 –