Je viens de commencer à essayer le paquet R mlr, je me demande si je peux personnaliser l'ensemble d'apprentissage et l'ensemble de test. Par exemple, toutes les données d'une séquence temporelle sont l'ensemble d'apprentissage sauf le dernier, et le dernier est l'ensemble de test. Voici mon exemple,comment rééchantillonner et comparer les résultats quand je veux juste prédire la dernière rangée de données en utilisant surv. fonctions dans le paquet 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)
les données pulmonaires proviennent de l'emballage de survie. J'utilise juste trois dimensions: le temps, le statut et l'âge. Maintenant, supposons qu'ils ne signifient pas l'âge des patients et combien de temps ils peuvent survivre. Disons que c'est un historique d'achat d'encre d'un client. âge = 74 signifie que ce client a acheté 74 bouteilles d'encre ce jour-là et l'heure = 306 signifie que le client n'a plus d'encre après 306 jours. Donc, je veux construire un modèle de survie en utilisant toutes les données, sauf pour la dernière rangée. Puis, quand j'ai les données de la dernière rangée, qui est l'âge = 58 impliquant que le client a acheté 58 bouteilles d'encre ce jour-là, je peux faire une prédiction à temps. Un nombre proche de 177 sera une bonne estimation. Donc, mon ensemble d'entraînement et mon test sont fixes, ce qui ne nécessite pas d'être rééchantillonné.
En outre, je dois changer les hyperparamètres pour un comparsion. Voici mon code:
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
Vous pouvez voir que j'utilise split=1
en makeResampleDesc
parce que je fixe ensemble de formation qui n'a pas besoin d'être redimensionnés. Les mesures au makeTuneWrapper
ne sont pas significatives pour moi car je dois personnaliser mes propres mesures. En raison de la division de données fixe, je ne peux pas utiliser les fonctions comme resample
ou tuneParams
pour obtenir une évaluation sur les données de test lors de l'utilisation de différents hyperparamètres. Donc, ma question est la suivante: lorsque l'ensemble de formation et l'ensemble de tests sont fixés, peut-il fournir une comparaison complète pour chaque hyperparamètre? Dans l'affirmative, comment le faire?
BTW, il ressemble est fonction makeFixedHoldoutInstance
qui pourrait peut le faire, ne savent pas comment l'utiliser. Par exemple, j'utilise makeFixedHoldoutInstance
de cette façon et j'ai ces informations d'erreur:
> 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!
Quelqu'un pourrait-il s'il vous plaît aider?
pourriez-vous s'il vous plaît ajouter les paquets que vous avez utilisés? aussi, il semble être 'target = c ('DaysDiff', 'Status')' – loki
Je viens d'utiliser le paquet mlr. La version est 2.11 –
Oui. Merci. C'est une faute de frappe.Mais tout l'autre code est ce que j'utilise et est devenu confus. –