r rpart r-caret

Mensaje de advertencia: "valores perdidos en medidas de rendimiento remuestreadas" en caret train() usando rpart



r-caret (3)

Estoy usando el paquete caret para entrenar un modelo con el paquete "rpart";

tr = train(y ~ ., data = trainingDATA, method = "rpart")

Los datos no tienen valores faltantes o NA, pero cuando se ejecuta el comando, aparece un mensaje de advertencia;

Warning message: In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures.

¿Alguien sabe (o podría indicarme dónde encontrar una respuesta) qué significa esta advertencia? Sé que me está diciendo que faltaban valores en las medidas de rendimiento remuestreadas, pero ¿qué significa eso exactamente y cómo puede surgir una situación como esa? Por cierto, la función de predict() funciona bien con el modelo ajustado, por lo que es solo mi curiosidad.


El problema

El problema es que la rpart está utilizando un algoritmo basado en árbol, que solo puede manejar un número limitado de factores en una característica determinada. Por lo tanto, es posible que tenga una variable que se haya establecido en un factor con más de 53 categorías:

> rf.1 <- randomForest(x = rf.train.2, + y = rf.label, + ntree = 1000) Error in randomForest.default(x = rf.train.2, y = rf.label, ntree = 1000) : Can not handle categorical predictors with more than 53 categories.

En la base de su problema, caret ejecuta esa función, así que asegúrese de arreglar sus variables categóricas con más de 53 niveles.

Aquí es donde se encontraba mi problema antes (note que el código postal viene como un factor ):

# ------------------------------- # # RANDOM FOREST WITH CV 10 FOLDS # # ------------------------------- # rf.train.2 <- df_train[, c("v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "zipcode", "price", "made_purchase")] rf.train.2 <- data.frame(v1=as.factor(rf.train.2$v1), v2=as.factor(rf.train.2$v2), v3=as.factor(rf.train.2$v3), v4=as.factor(rf.train.2$v4), v5=as.factor(rf.train.2$v5), v6=as.factor(rf.train.2$v6), v7=as.factor(rf.train.2$v7), v8=as.factor(rf.train.2$v8), zipcode=as.factor(rf.train.2$zipcode), price=rf.train.2$price, made_purchase=as.factor(rf.train.2$made_purchase)) rf.label <- rf.train.2[,"made_purchase"]

La solución

Eliminar todas las variables categóricas que tengan más de 53 niveles .

Aquí está mi código corregido, ajustando el código postal variable categórico, incluso podría haberlo envuelto en un envoltorio numérico como este: as.numeric(rf.train.2$zipcode) .

# ------------------------------- # # RANDOM FOREST WITH CV 10 FOLDS # # ------------------------------- # rf.train.2 <- df_train[, c("v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "zipcode", "price", "made_purchase")] rf.train.2 <- data.frame(v1=as.factor(rf.train.2$v1), v2=as.factor(rf.train.2$v2), v3=as.factor(rf.train.2$v3), v4=as.factor(rf.train.2$v4), v5=as.factor(rf.train.2$v5), v6=as.factor(rf.train.2$v6), v7=as.factor(rf.train.2$v7), v8=as.factor(rf.train.2$v8), zipcode=rf.train.2$zipcode, price=rf.train.2$price, made_purchase=as.factor(rf.train.2$made_purchase)) rf.label <- rf.train.2[,"made_purchase"]


Este error ocurre cuando el modelo no converge en algunos pliegues de validación cruzada, las predicciones obtienen una varianza cero. Como resultado, las métricas como RMSE o Rsquared no se pueden calcular para que se conviertan en NA. A veces hay parámetros que puede ajustar para una mejor convergencia, por ejemplo, la biblioteca de redes neuronales ofrece aumentar el umbral que casi siempre lleva a la convergencia. Sin embargo, no estoy seguro acerca de la biblioteca rpart.

Otra razón para que esto suceda es que ya tiene NA en sus datos de capacitación. Entonces, la cura obvia es eliminarlos antes de pasarlos en tren (data = na.omit (training.data)).

Espero que se ilumine un poco.


No estoy definitivamente seguro sin más datos.

Si esto es una regresión, el caso más probable es que el árbol no encontró una buena división y usó el promedio del resultado como predictor. Eso está bien, pero no puedes calcular R ^ 2 ya que la varianza de las predicciones es cero.

Si la clasificación, es difícil de decir. Podría tener un remuestreo en el que una de las clases de resultados tenga cero muestras, por lo que la sensibilidad o especificidad no está definida y, por lo tanto, NA .