Estoy utilizando el paquete R randomForest a hacer una regresión en algunos de los datos biológicos. Mi formación el tamaño de los datos es 38772 X 201.

Sólo me preguntaba—¿cuál sería un buen valor por el número de árboles ntree y el número de la variable por nivel mtry? Hay una fórmula aproximada para encontrar los valores de parámetro?

Cada fila en mis datos de entrada es de 200 caracteres que representan la secuencia de aminoácidos, y quiero construir un modelo de regresión para utilizar dicha secuencia con el fin de predecir las distancias entre las proteínas.

  • Esto suena más como un trabajo de stats.stackexchange.com
  • Estoy de acuerdo, mientras que una buena pregunta, que no pertenece aquí. También, tal vez intente hacerlo más legible.
  • En la realidad de la construcción de bosques aleatorios a partir de grandes conjuntos de datos, ntrees es a menudo un compromiso entre tiempo de ejecución y la precisión.
InformationsquelleAutor DOSMarter | 2012-12-19

5 Comentarios

  1. 35

    El valor predeterminado para mtry es muy sensible así que no hay realmente una necesidad de estiércol con ella. Hay una función tuneRF para la optimización de este parámetro. Sin embargo, tenga en cuenta que puede causar sesgo.

    No hay optimización para el número de bootstrap repeticiones. Yo a menudo comienzan con ntree=501 y, a continuación, trazar el bosque aleatorio objeto. Esto le mostrará el error de convergencia basado en el OOB error. Desea suficientes árboles para estabilizar el error, pero no tantas que más correlacionan el conjunto, lo que conduce a overfit.

    Aquí está la advertencia: variable interacciones estabilizar a un ritmo más lento que un error así que, si usted tiene un gran número de variables independientes que necesita más repeticiones. Me gustaría mantener el ntree un número impar de modo que los vínculos pueden ser rotas.

    Por las dimensiones del problema que me gustaría empezar ntree=1501. Me gustaría también se recomienda buscar en uno de los publicados métodos de selección de variables para reducir el número de variables independientes.

    • Espero que usted no se cuenta que limpiar esto un poco para que sea más legible.
    • Sobre el último punto de @Jeffrey Evans respuesta, me gustaría sugerir el uso de la rfcv (se explica también aquí stats.stackexchange.com/questions/112556/…). He encontrado que es útil para la eliminación de la menos importante de las variables independientes.
  2. 18

    La respuesta corta es no.

    La randomForest función, por supuesto, tiene valores por defecto para ambos ntree y mtry. El valor predeterminado para mtry es a menudo (pero no siempre) sensible, mientras que en general la gente querrá aumentar ntree de su valor predeterminado de 500 bastante.

    El valor «correcto» para ntree generalmente no es una gran preocupación, como será evidente que con un poco de retoques que las predicciones del modelo no cambia mucho después de un cierto número de árboles.

    Puede pasar (leer: los residuos) un montón de tiempo jugando con cosas como mtry (y sampsize y maxnodes y nodesize etc.), probablemente a algún beneficio, pero en mi experiencia no mucho. Sin embargo, cada conjunto de datos será diferente. A veces se puede ver una gran diferencia, a veces ninguno.

    La símbolo de intercalación paquete tiene una función general train que le permite hacer una cuadrícula simple búsqueda a través de los valores de parámetros como mtry para una amplia variedad de modelos. Mi única precaución es que hacer esto con bastante grandes conjuntos de datos es probable que obtener el tiempo que consume bastante rápido, así que ten cuidado para que.

    También, de alguna manera, me olvidé de que el ranfomForest paquete en sí mismo tiene un tuneRF función que es específicamente para la búsqueda de la «óptima» valor para mtry.

    • Para su INFORMACIÓN, he hablado con Adele Cutler en relación con la optimización de los parámetros de RF y ella indicó que el paso a paso de los procedimientos que «tuneRF» y «tren» uso lleva a un sesgo. También, como indiqué en mi post, es posible overfit RF por encima de la correlación de la agrupación. Así, hay un equilibrio en el número de bootstrap se replica entre error de convergencia, la variable de interacción y evitar overfit.
  3. 5

    Podría este documento de ayuda ?
    Limitar el Número de Árboles en Bosques Aleatorios

    Abstracto. El objetivo de este trabajo es proponer un procedimiento simple que
    a priori determina un número mínimo de clasificadores para combinar en orden
    para obtener una predicción nivel de precisión similar a la obtenida con la
    la combinación de los conjuntos más grandes. El procedimiento se basa en la prueba de McNemar
    la prueba no paramétrica de importancia. Conocer a priori el mínimo
    tamaño de la clasificador de conjunto que dé la mejor exactitud de la predicción, constituye
    una ganancia para el tiempo y la memoria de los costos, especialmente para grandes bases de datos
    y aplicaciones en tiempo real. Aquí se aplica este procedimiento a cuatro múltiples
    clasificador de sistemas con C4.5 árbol de decisión (Breiman del Embolsado, Ho
    Al azar subespacios, su combinación nos la etiqueta ‘Bagfs’, y Breiman del
    Bosques aleatorios) y cinco grandes bases de datos de referencia. Merece la pena destacar
    que el procedimiento propuesto puede ser fácilmente extendido a otros
    algoritmos de aprendizaje de un árbol de decisión así. Los resultados experimentales
    demostró que es posible limitar significativamente el número de árboles. Nosotros
    también mostró que el número mínimo de árboles necesarios para la obtención de
    la mejor exactitud de la predicción puede variar de un clasificador combinación
    método a otro

    Que nunca use más de 200 árboles.

    los valores de ajuste para ntree y mtry para el azar del bosque modelo de regresión

  4. 1

    Puedo utilizar el código siguiente para comprobar la precisión como puedo jugar con ntree y mtry (cambio de los parámetros):

    results_df <- data.frame(matrix(ncol = 8))
    colnames(results_df)[1]="No. of trees"
    colnames(results_df)[2]="No. of variables"
    colnames(results_df)[3]="Dev_AUC"
    colnames(results_df)[4]="Dev_Hit_rate"
    colnames(results_df)[5]="Dev_Coverage_rate"
    colnames(results_df)[6]="Val_AUC"
    colnames(results_df)[7]="Val_Hit_rate"
    colnames(results_df)[8]="Val_Coverage_rate"
    trees = c(50,100,150,250)
    variables = c(8,10,15,20)
    for(i in 1:length(trees))
    {
    ntree = trees[i]
    for(j in 1:length(variables))
    {
    mtry = variables[j]
    rf<-randomForest(x,y,ntree=ntree,mtry=mtry)
    pred<-as.data.frame(predict(rf,type="class"))
    class_rf<-cbind(dev$Target,pred)
    colnames(class_rf)[1]<-"actual_values"
    colnames(class_rf)[2]<-"predicted_values"
    dev_hit_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, predicted_values ==1))
    dev_coverage_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, actual_values ==1))
    pred_prob<-as.data.frame(predict(rf,type="prob"))
    prob_rf<-cbind(dev$Target,pred_prob)
    colnames(prob_rf)[1]<-"target"
    colnames(prob_rf)[2]<-"prob_0"
    colnames(prob_rf)[3]<-"prob_1"
    pred<-prediction(prob_rf$prob_1,prob_rf$target)
    auc <- performance(pred,"auc")
    dev_auc<-as.numeric(auc@y.values)
    pred<-as.data.frame(predict(rf,val,type="class"))
    class_rf<-cbind(val$Target,pred)
    colnames(class_rf)[1]<-"actual_values"
    colnames(class_rf)[2]<-"predicted_values"
    val_hit_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, predicted_values ==1))
    val_coverage_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, actual_values ==1))
    pred_prob<-as.data.frame(predict(rf,val,type="prob"))
    prob_rf<-cbind(val$Target,pred_prob)
    colnames(prob_rf)[1]<-"target"
    colnames(prob_rf)[2]<-"prob_0"
    colnames(prob_rf)[3]<-"prob_1"
    pred<-prediction(prob_rf$prob_1,prob_rf$target)
    auc <- performance(pred,"auc")
    val_auc<-as.numeric(auc@y.values)
    results_df = rbind(results_df,c(ntree,mtry,dev_auc,dev_hit_rate,dev_coverage_rate,val_auc,val_hit_rate,val_coverage_rate))
    }
    }   
  5. 1

    Un buen truco que yo uso es inicialmente para empezar con la primera tomando la raíz cuadrada del número de predictores y enchufe el valor para «mtry». Es generalmente el mismo valor que tunerf función en el bosque aleatorio se elija.

Dejar respuesta

Please enter your comment!
Please enter your name here