Compare R-cuadrado de dos modelos diferentes de Random Forest

10

Estoy usando el paquete randomForest en R para desarrollar un modelo de bosque aleatorio para tratar de explicar un resultado continuo en un conjunto de datos "amplio" con más predictores que muestras.

Específicamente, estoy ajustando un modelo de RF que permite que el procedimiento seleccione de un conjunto de ~ 75 variables predictoras que considero importantes.

Estoy probando qué tan bien ese modelo predice el resultado real para un conjunto de pruebas reservado, usando el enfoque publicado aquí anteriormente , a saber,

... o en R:

1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

Pero ahora tengo ~ 25 variables predictoras adicionales que puedo agregar. Cuando se usa el conjunto de ~ 100 predictores, el R² es más alto. Quiero probar esto estadísticamente, en otras palabras, cuando se usa el conjunto de ~ 100 predictores, ¿el modelo prueba significativamente mejor en los datos de prueba que el ajuste del modelo usando ~ 75 predictores? Es decir, es el R² de probar el ajuste del modelo de RF en el conjunto de datos completo significativamente más alto que el R² de probar el modelo de RF en el conjunto de datos reducido.

Esto es importante para mí, ya que estos son datos piloto, y obtener esos 25 predictores adicionales fue costoso, y necesito saber si debo pagar para medir esos predictores en un estudio de seguimiento más amplio.

Estoy tratando de pensar en algún tipo de enfoque de remuestreo / permutación, pero no se me ocurre nada.

Stephen Turner
fuente

Respuestas:

8

¡Validación cruzada! Use la función de tren con cuidado para adaptarse a sus 2 modelos. Use un valor de mtry (el mismo para ambos modelos). Caret devolverá una estimación re-muestreada de RMSE y .R2

Consulte la página 3 de la viñeta de caret (también en el manual de referencia completo )

Zach
fuente
Estoy de acuerdo, excepto por su omisión, que OP debe usar R cuadrado ajustado, ya que para esto está diseñado. Los modelos tienen la misma Y pero diferentes conjuntos de predictores, por lo que se necesita un ajuste R cuadrado para penalizar la diferencia en los grados de libertad / complejidad del modelo. El otro problema que veo es potencialmente un problema de tamaño de muestra; OP requeriría un tamaño de muestra MASIVO para tener cualquier tipo de esperanza real de que esto no sea solo un ajuste excesivo, incluso con CV.
LSC
@LSC Diría que si tiene un conjunto de datos adicional (no utilizado para la selección), podrían usar R2 sin ajuste, ya que es simplemente RMSE normalizado. Estoy de acuerdo en que necesitarían un conjunto de datos bastante grande para hacer esto.
Zach
datos nuevos o antiguos, todo lo demás constante, poner 100 términos en un modelo frente a 25 tendrá un R cuadrado sin ajustar más alto en comparación con el R cuadrado del modelo predictor 25. Esto se ve fácilmente cuando se calcula la suma de los errores al cuadrado entre los dos (más términos son SSE más bajos, todo lo demás es lo mismo). Creo que las personas a menudo olvidan que más términos nunca disminuirán el R cuadrado, pero si apestan en relación con su valor, pueden disminuir el R cuadrado ajustado, que es una mejor medida para mirar la inversión.
LSC
"más términos nunca disminuirán R-cuadrado" <- Esta afirmación es falsa, cuando se calcula R2 fuera de la muestra.
Zach
Como mencioné, lo estoy señalando porque muchas personas que hacen estas preguntas no recuerdan esta idea en primer lugar. Creo que entender por qué esto es cierto en la muestra y puede no contener nuevos datos es importante para entender qué y cómo se optimiza algo en la ecuación original.
LSC
4

R2

La opción secundaria es usar toda la selección de características relevantes, lo que le indicaría qué atributos tienen una posibilidad de ser significativamente útiles para la clasificación, por lo tanto, esos atributos caros valen su precio. Se puede hacer, por ejemplo, con un contenedor RF, Boruta .

Comunidad
fuente
para una prueba pareada, supongo que los 2 modelos están en los mismos pliegues. ¿De modo que las k filas de la matriz son los pliegues y las dos columnas son el modelo 1 y el modelo 2?
B_Miner
@B_Miner Precisamente.
1

Es posible que desee pensar en términos de significación práctica en lugar de significación estadística (o ambas). Con suficientes datos puede encontrar cosas significativas estadísticamente que no tendrán un impacto real en su uso. Recuerdo haber analizado un modelo una vez donde las interacciones de 5 vías fueron estadísticamente significativas, pero cuando las predicciones del modelo que incluían todo hasta las interacciones de 5 vías se compararon con las predicciones de un modelo que incluía solo interacciones de 2 vías y efectos principales. , la mayor diferencia fue inferior a 1 persona (la respuesta fue el número de personas y todos los valores interesantes estaban lejos de 0). Entonces la complejidad añadida no valió la pena. Observe las diferencias en sus predicciones para ver si las diferencias son suficientes para justificar el costo adicional, si no, ¿por qué molestarse incluso en buscar la significación estadística? Si las diferencias son lo suficientemente grandes como para justificar el costo si son reales, entonces secundo las otras sugerencias de usar la validación cruzada.

Greg Snow
fuente
1

R2

library(randomForest)
data(iris)
set.seed(42)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# with species
model1 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length +
   Petal.Width + Species, data = trainset)
# without species
model2 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length + 
   Petal.Width, data = trainset)

pred1 <- predict(model1, testset[, -1])
pred2 <- predict(model2, testset[, -1])

y <- testset[, 1]
n <- length(y)

# psi is the mean squared prediction error (MSPE) estimate
# sigma2 is the estimate of the variance of the MSPE
psi1 <- mean((y - pred1)^2)
sigma21 <- 1/n * var((y - pred1)^2) 
# 95% CI:
c(psi1 - 1.96 * sqrt(sigma21), psi1, psi1 + 1.96 * sqrt(sigma21))

psi2 <- mean((y - pred2)^2)
sigma22 <- 1/n * var((y - pred2)^2) 
# 95% CI:
c(psi2 - 1.96 * sqrt(sigma22), psi2, psi2 + 1.96 * sqrt(sigma22))

El método también se puede extender para que funcione dentro de la validación cruzada (no solo para dividir muestras como se muestra arriba).

Eric
fuente
0

Como ya está usando randomForestdespués de la validación cruzada, puede emitir el cálculo del ajuste elegido de los valores de importancia del predictor.

> require(randomForest)
> rf.fit = randomForest(Species~.,data=iris,importance=TRUE)
> rf.fit$importance
                  setosa   versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.036340893  0.021013369 0.032345037          0.030708732         9.444598
Sepal.Width  0.005399468 -0.002131412 0.007499143          0.003577089         2.046650
Petal.Length 0.319872296  0.297426025 0.290278930          0.299795555        42.494972
Petal.Width  0.343995456  0.309455331 0.277644128          0.307843300        45.286720
mrbcuda
fuente
0

Veo que esta pregunta se hizo hace mucho tiempo; sin embargo, ninguna respuesta señala las deficiencias y malentendidos significativos en la pregunta todavía.

Tenga en cuenta:

  1. Usted declara que R ^ 2 = ESS / TSS = 1 - RSS / TSS. Esto solo es cierto en un contexto lineal. La igualdad TSS = RSS + ESS es válida solo en regresión lineal con intercepción. Por lo tanto, no puede usar esas definiciones para bosques aleatorios indistintamente. Es por eso que RMSE y similares son funciones de pérdida más típicas.

  2. Más importante para fines estadísticos: R ^ 2 sigue una distribución desconocida (también en la configuración lineal). Eso significa que probar una hipótesis con significación estadística usando R ^ 2 no es tan sencillo. La validación cruzada, como mencionó Zach , es una buena opción.

En cuanto a la respuesta del usuario88 : la validación cruzada con la prueba de Wilcoxon es un enfoque válido. Un artículo reciente utiliza la prueba de rangos firmados de Wilcoxon y las pruebas de Friedman para comparar diferentes métodos y algoritmos.

tobiaspk1
fuente