9 votos

¿Cómo se consiguen las funciones lmFuncs de la función rfe en caret para hacer una regresión logística?

He estado experimentando con el rfe en la función caret para realizar regresión logística con selección de características. Utilicé el paquete lmFuncs funciones con lo siguiente rfeContol :

ctrl <- rfeControl(functions = lmFuncs, method = 'cv', rerank=TRUE, saveDetails=TRUE, verbose = TRUE, returnResamp = "all", number=100)

A continuación se muestra la estructura del rfe llamar:

fit.rfe=rfe(df.preds,df.depend, metric='RMSE',sizes=c(5,10,15,20), rfeControl=ctrl)

df.preds es un marco de datos de entradas al modelo. df.depend es un vector de 1 o 0 correspondiente a cada fila de df.preds para indicar la respuesta.

El modelo resultante al que se accede desde el fit en el rfe es de clase lm y produce valores predichos menores que cero y mayores que 1 cuando utilizo el siguiente código con la función predict función:

predict(fit.rfe$fit,df,type='response')

Dado que espero que sea una logística, todos los valores predichos deben ser mayores que cero y menores que uno.

Agradeceremos cualquier ayuda.

2 votos

No es aconsejable utilizar una validación cruzada de 100 veces. En la práctica, cada pliegue va a ser un 99% similar a otro pliegue. Utilice un menor número de pliegues (como 5 o 10) para obtener más datos nuevos en cada pliegue (mezclar más) y luego, si quieres hacer repeticiones, especifique repeats= . De lo contrario, no podrá simular realmente el rendimiento de la técnica con datos nuevos. Véase pregunta para la comparación de k-fold y leave-one-out CV, que es lo que se aborda como number= sube

0 votos

¿Has probado lrFunc en lugar de lmFunc?

6voto

mathgirl Puntos 31

lmFuncs es ajustar la regresión lineal. Sólo tienes que escribir lmFuncs$fit para ver. Intenta reescribirlo:

lmFuncs$fit<-function (x, y, first, last, ...){   
     tmp <- as.data.frame(x)   
     tmp$y <- y   
 glm(y ~ ., data = tmp,family=binomial)   
}

Tenga en cuenta, que no sé cómo adjuntar <environment: namespace:caret> y cuál es su significado. Puedes probar este truco con tus datos y comentar el resultado.

0 votos

Gracias por su respuesta. Me sale un error cuando intento reescribir. lmFuncs$fit<-function (x, y, first, last, ...){ tmp <- as.data.frame(x) tmp$y <- y glm(y ~ ., data = tmp,family=binomial) } Error: unexpected symbol in "lmFuncs$fit<-function (x, y, first, last, ...){ tmp <- as.data.frame(x) tmp"

0 votos

El código original con párrafos iba bien. Acabo de editar mi respuesta.

4 votos

Conseguí que funcionara definiendo un nuevo objeto llamado glmFuncs usando el siguiente código: glmFuncs=lmFuncs glmFuncs$fit=function (x, y, first, last, ...) { tmp <- as.data.frame(x) tmp$y <- y glm(y ~ ., data = tmp, family=binomial(link='logit'))} . Hace exactamente lo que quiero que haga. Muchas gracias.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X