16 votos

Gradiente de impulsar la máquina de la precisión disminuye a medida que el número de iteraciones aumenta

Estoy experimentando con el gradiente de impulsar el algoritmo máquina a través de la caret paquete en R.

El uso de un pequeño de admisiones de la universidad del conjunto de datos, me encontré con el siguiente código:

library(caret)

### Load admissions dataset. ###
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

### Create yes/no levels for admission. ### 
mydata$admit_factor[mydata$admit==0] <- "no"
mydata$admit_factor[mydata$admit==1] <- "yes"             

### Gradient boosting machine algorithm. ###
set.seed(123)
fitControl <- trainControl(method = 'cv', number = 5, summaryFunction=defaultSummary)
grid <- expand.grid(n.trees = seq(5000,1000000,5000), interaction.depth = 2, shrinkage = .001, n.minobsinnode = 20)
fit.gbm <- train(as.factor(admit_factor) ~ . - admit, data=mydata, method = 'gbm', trControl=fitControl, tuneGrid=grid, metric='Accuracy')
plot(fit.gbm)

y descubrí para mi sorpresa que el modelo de la precisión de validación cruzada disminuido en lugar de aumentar el número de iteraciones impulsando aumentó, alcanzando un mínimo de precisión de aproximadamente .59 en ~450,000 iteraciones.

enter image description here

No me incorrectamente implementar el GBM algoritmo?

EDITAR: Siguiente Underminer la sugerencia, he de volver a ejecutar el anterior caret código, sino que se centró en la ejecución de los 100 a 5.000 iteraciones impulsando:

set.seed(123)
fitControl <- trainControl(method = 'cv', number = 5, summaryFunction=defaultSummary)
grid <- expand.grid(n.trees = seq(100,5000,100), interaction.depth = 2, shrinkage = .001, n.minobsinnode = 20)
fit.gbm <- train(as.factor(admit_factor) ~ . - admit, data=mydata, method = 'gbm', trControl=fitControl, tuneGrid=grid, metric='Accuracy')
plot(fit.gbm)

La gráfica resultante se muestra que la precisión en la realidad de los picos en casi .705 en ~1,800 iteraciones:

enter image description here

Lo curioso es que la exactitud no meseta en ~.70 pero disminuyeron siguiente 5.000 iteraciones.

18voto

smartappers Puntos 11

Lo que han mostrado es un ejemplo clásico de sobreajuste. El pequeño repunte en el error viene de peor rendimiento en la validación de parte de tu cruz validado en el conjunto de datos. Más iteraciones deben casi siempre a mejorar el error en el conjunto de entrenamiento, pero lo opuesto es cierto para la validación/conjunto de pruebas.

14voto

Underminer Puntos 1112

En general, el impulso de error puede aumentar con el número de iteraciones, específicamente cuando los datos de ruido (por ejemplo, mal etiquetado de los casos). Este podría ser tu problema, pero yo no sería capaz de decir sin saber más acerca de sus datos

Básicamente, el impulso puede 'focus' en predecir correctamente los casos que contienen información errónea, y en el proceso, deteriorar el rendimiento promedio en otros casos que son más de fondo.

En este enlace (el Impulso y el Ruido) muestra una mejor descripción que puedo aportar de la cuestión.

Este papel (al Azar Clasificación de Ruido) de Largo y Servedio proporciona más detalles técnicos de la cuestión.

6voto

horaceT Puntos 170

Códigos para reproducir un resultado similar, sin cuadrícula de búsqueda,

mod = gbm(admit ~ .,
      data = mydata[,-5],
      n.trees=100000,
      shrinkage=0.001,
      interaction.depth=2,
      n.minobsinnode=10,
      cv.folds=5,
      verbose=TRUE,
      n.cores=2)

best.iter <- gbm.perf(mod, method="OOB", plot.it=TRUE, oobag.curve=TRUE, overlay=TRUE)
print(best.iter)
[1] 1487
pred = as.integer(predict(mod, newdata=mydata[,-5], n.trees=best.iter) > 0)
y = mydata[,1]
sum(pred == y)/length(y)
[1] 0.7225

5voto

horaceT Puntos 170

El gbm paquete tiene una función para calcular el óptimo # de iteraciones (= # de árboles, o # de funciones de base),

gbm.perf(mod, method="OOB", plot.it=TRUE, oobag=TRUE, overlay=TRUE)

Usted no necesita símbolo de intercalación del tren para que.

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