2012-05-08 17 views
7

Estoy tratando de usar el módulo R caret para la generación de modelos y quiero usar alguna función de validación cruzada. Descubrí que la única función de validación cruzada que funciona junto con rpart es LOOCV (deje una validación cruzada).caret: Error al usar cualquier cosa que no sea LOOCV con rpart

El siguiente código tiros el error:

library(cart) 
data(trees) 
formula=Volume~Girth+Height 
train(formula, data=trees, method='rpart') 

Warning message: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, : There were missing values in resampled performance measures.

¿Qué significa este error y cómo puedo hacer que se vaya? Busqué en Internet, ni un solo golpe para este mensaje de error. Seguí el error hasta la generación del modelo rpart. ¡De alguna manera genera este mensaje de error, todos los demás métodos de generación de modos funcionan bien!

Todo funciona bien si uso LOOCV.

Rastreé la advertencia hasta el archivo workflows.R, pero no entiendo por qué se lanza esta advertencia.

> sessionInfo() 
R version 2.15.0 (2012-03-30) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_GB.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_GB.UTF-8  LC_COLLATE=en_GB.UTF-8  
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] parallel stats  graphics grDevices utils  datasets methods 
[8] base  

other attached packages: 
[1] earth_3.2-3   plotrix_3.4   plotmo_1.3-1   
[4] leaps_2.9    doMC_1.2.5   multicore_0.1-7  
[7] iterators_1.0.6  forecast_3.20   RcppArmadillo_0.3.0.2 
[10] Rcpp_0.9.10   fracdiff_1.4-1  tseries_0.10-28  
[13] zoo_1.7-7    quadprog_1.5-4  caret_5.15-023  
[16] foreach_1.4.0   cluster_1.14.2  reshape_0.8.4   
[19] plyr_1.7.1   lattice_0.20-6  mda_0.4-2    
[22] class_7.3-3   rpart_3.1-52   data.table_1.8.0  

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 compiler_2.15.0 grid_2.15.0  

Respuesta

9

Uso de la Lista de correo R y la ayuda del autor caret descubrí la siguiente solución:

Si por alguna razón el modelo que se genera es constante se produce el error. Constante significa en este caso que para todos los valores de entrada, el modelo siempre arroja el mismo valor. En este caso, el cálculo de R^2 falla. R^2 se calcula por defecto por caret. Como caret no usa el valor R^2 para la selección del modelo, puede omitir este error.

Dos preguntas siguen:

  • No me queda claro por qué el cálculo de R^2 falla si el modelo es constante. El código en caret falla explícitamente si no hay al menos dos valores diferentes en la predicción del modelo. Reemplacé el cálculo R^2 con uno auto-escrito que no tiene estos límites.
  • La pregunta de por qué rpart a veces genera un modelo constante todavía está abierta. Especialmente por qué solo genera modelos constantes para otras validaciones cruzadas que LOOCV.

En resumen: puede ignorar la advertencia y, si es necesario, escribir su propio R^2 para corregir la advertencia.

+0

Gracias theomega por compartir la respuesta con SO. Me encuentro con el mismo problema ahora al ajustar nnet, knn y svmRadial. ¿A qué te refieres con R^2 en este contexto? (¿y cómo editaste el tuyo?). ¿Hiciste algún progreso en las dos preguntas que planteas arriba? –

+0

Bien, caret calcula varias métricas, incluyendo MAPE y R^2 para los modelos. El cálculo R^2 arroja un error si su modelo es constante (predice el mismo valor para todas las variables independientes). La función R^2 utilizada por caret no se puede usar para modelos constantes. Hay otras definiciones R^2 que funcionan. Usé uno de ellos. Debe tener en cuenta que no hay una definición (!) R^2 sino varias que dan lugar a valores y restricciones diferentes. – theomega

Cuestiones relacionadas