Hola, Puedes ver aquí un ejemplo de cómo comparar varios modelos usando "caret".
https://stackoverflow.com/questions/14800021/statistics-of-prediction-for-multiple-models-with-caret O mejor en el propio manual de "caret", en esta sección: https://topepo.github.io/caret/model-training-and-tuning.html#exploring-and-comparing-resampling-distributions Y como recomendación te sugiero que usen "ranger" en vez de "randomForest", no solo por velocidad, si no también por las mejoras y ampliaciones de funcionalidad que incorpora. Saludos, Carlos Ortega www.qualityexcellence.es El 2 de junio de 2017, 19:58, Jesús Para Fernández < [email protected]> escribió: > Para el tema de los árboles necesarios se ve muy bien haciendo > plot(modelo) y se ve en que punto se han estabilizado o si necesitas más > árboles. > ------------------------------ > *De:* Isidro Hidalgo Arellano <[email protected]> > *Enviado:* viernes, 2 de junio de 2017 15:01:37 > *Para:* 'Jesús Para Fernández'; 'Manuel Spínola' > *Cc:* 'Carlos Ortega'; 'Lista R' > > *Asunto:* RE: [R-es] CV en R > > > No, llega un momento en el que más árboles no te supone mejoría, e incluso > funciona peor. Que funcione peor lo atribuyo al ruido, porque en teoría no > tiene mucho sentido, la verdad... Pero no he probado a coger más árboles de > los "necesarios". Lo probaré… > > Un saludo > > > > *De:* Jesús Para Fernández [mailto:[email protected]] > *Enviado el:* viernes, 02 de junio de 2017 14:54 > *Para:* Isidro Hidalgo Arellano <[email protected]>; 'Manuel Spínola' < > [email protected]> > *CC:* 'Carlos Ortega' <[email protected]>; 'Lista R' < > [email protected]> > *Asunto:* Re: [R-es] CV en R > > > > Si, de eso soy consciente. Normalmente cuantos más arboles cojas es mejor > no? el problema es que se incrementa el tiempo de computación... > > > ------------------------------ > > *De:* Isidro Hidalgo Arellano <[email protected]> > *Enviado:* viernes, 2 de junio de 2017 14:50 > *Para:* 'Manuel Spínola' > *Cc:* 'Jesús Para Fernández'; 'Carlos Ortega'; 'Lista R' > *Asunto:* RE: [R-es] CV en R > > > > El algoritmo en sí no, pero si quieres ajustar los parámetros (número de > árboles, tamaño del nodo, etc.) hay que hacerlo. > > En la práctica te puedo asegurar que hay diferencia entre usar 500 árboles > o 100, igual que el tamaño del nodo que cojas; afinar los parámetros puede > suponer ajustar bastante los resultados. > > Un saludo > > > > > > Isidro Hidalgo Arellano > > Observatorio del Mercado de Trabajo > > Consejería de Economía, Empresas y Empleo > > http://www.castillalamancha.es/ > > Inicio | Gobierno de Castilla-La Mancha <http://www.castillalamancha.es/> > > www.castillalamancha.es > > Web oficial del gobierno autonómico de Castilla-La Mancha con información > sobre actividad administrativa, economía, educación, sanidad, servicios > sociales, sede ... > > > > > > > > > > *De:* Manuel Spínola [mailto:[email protected] <[email protected]>] > *Enviado el:* viernes, 02 de junio de 2017 14:42 > *Para:* Isidro Hidalgo Arellano <[email protected]> > *CC:* Jesús Para Fernández <[email protected]>; Carlos Ortega < > [email protected]>; Lista R <[email protected]> > *Asunto:* Re: [R-es] CV en R > > > > Hola, > > > > No soy un experto en estas técnicas, pero hasta donde yo se, el algoritmo > Random Forest no requiere cross validation. > > > > Lo dice el mismo Leo Breiman que creo ha sido uno de los investigadores > que más ha contribuido al desarrollo de Random Forest ( > https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm) > > Random forests - classification description > <https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm> > > www.stat.berkeley.edu > > Contents. Introduction Overview Features of random forests Remarks How > Random Forests work The oob error estimate Variable importance Gini > importance > > > > > > Manuel > > > > El 2 de junio de 2017, 6:35, Isidro Hidalgo Arellano <[email protected]> > escribió: > > Una vez que tienes la técnica y los parámetros óptimos resultantes de la > validación cruzada, ya tienes el modelo que necesitas, NO tienes que hacer > nada más. Si vuelves a modelar con todos los datos todo el trabajo de > validación que has hecho lo envías a hacer gárgaras. Estarías construyendo > un modelo con sobreajuste. > > > > Para quedarte tranquilo, haz la prueba, coge el modelo resultante de la > validación y ve aplicándolo a los nuevos datos. Haz lo mismo con el que > obtengas de ése paso final que NO debes dar, y que no te he puesto en mi > código corregido, a saber: > > modelo.final<-randomForest(respuesta~.,datos) > > > > Cuando los aplicas con los nuevos datos, ¿cuál funciona mejor? > > > > Un saludo > > > > > > Isidro Hidalgo Arellano > > Observatorio del Mercado de Trabajo > > Consejería de Economía, Empresas y Empleo > > http://www.castillalamancha.es/ > > > > > > > > De: Jesús Para Fernández [mailto:[email protected]] > Enviado el: viernes, 02 de junio de 2017 14:21 > Para: Carlos Ortega <[email protected]> > CC: Lista R <[email protected]>; Isidro Hidalgo Arellano > <[email protected]> > Asunto: Re: [R-es] CV en R > > > > Pero creo que hay un concepto que no termina de aclararse. > > > > Creo que lo importante es quedarse con el modelo bueno, por ejemplo, > imaginemos que queremos probar los siguientes algoritmos: RF, SVM, KNN, > LDA.... > > > > Entonces hacemos lo siguiente: > > > > Probamos con todos ellos, para lo que se hacen particiones: > > > > Imaginemos que tengo un datasheet llamado datos, perfectamnte balanceado, > sin datos faltantes, ni ruido ni nada asi. Entonces: > > > > for(i in 1:10){ > > train #saco el train de los datos > > test #saco el test de los datos > > pruebo RF, con diferentes configuaraciones (bucles j,k) > > pruebo SVM, con diferentes configuaraciones (bucles j,k) > > pruebo KNN > > pruebo LDA > > > > guardo resultados > > > > } > > > > y sobre el que mejor de, entonces ya creo el modelo definitivo, con el > conjunto de datos global. Si fuera un randomForest > > > > randomForest(respuesta~.,ntree=500,nodesize=4,datos) > > > > Y ese es mi modelo para los proximos daots que vengan yq ue no han formado > parte del datasheet datos > > > > _____ > > De: Carlos Ortega < <mailto:[email protected]> > [email protected]> > Enviado: viernes, 2 de junio de 2017 13:11 > Para: Jesús Para Fernández > Cc: Lista R; Isidro Hidalgo Arellano > Asunto: Re: [R-es] CV en R > > > > Hola, > > > > Eso es justamente lo que hace "caret" de una manera muy sencilla y sin que > tú te tengas que preocupar de quedarte con el mejor bucket (del CV) o con > la mejor combinación en tu "grid search". > > > > Te recomiendo que uses "caret" para esto.... > > Puedes incluso evaluar los dos algoritmos "RF" y "svm" a la vez y conocer > realmente el nivel de precisión que ofrecen ambos. > > Y claro, inicialmente puedes elegir el conjunto de entrenamiento sobre el > que haces el CV dejando el resto "test" para validar el nivel de > predicción. > > > > Gracias, > > Carlos Ortega > > <http://www.qualityexcellence.es> www.qualityexcellence.es > > > <http://www.qualityexcellence.es/> QualityExcellence > > <http://www.qualityexcellence.es> www.qualityexcellence.es > > QUALITY EXCELLENCE, consultores en calidad, procesos y mejora continua > > > > > > El 2 de junio de 2017, 13:06, Isidro Hidalgo Arellano < > <mailto:[email protected]> [email protected]> escribió: > > > No me has parecido para nada borde. > > > > Ok. Centrémonos en RF y bajemos el nº de parámetros a 2: ntree y nodesize. > > Te haces una parrilla de ntree: 100, 200, 300, 400, 500 > > Otra de nodesize: 3, 6, 10 > > Con esto tienes 15 combinaciones. > > Vamos al código. Simplemente crea una lista donde metes los resultados (y > tienes que añadir los parámetros, que has omitido) > > Después graficas usando un mapa de calor para ver qué combinación de > parámetros te da el mejor resultado (en abscisas ntree y en ordenadas > nodesize). Una vez que veas los intervalos de parámetros que mejor se > comportan, afinas el resultado con otra validación cruzada: > > > > for(i in 1:15){ > > > > numeros<-sample(1:1500,1500*0.7) > > > > train<-datos[numeros,] > > > > test<-datos[-numeros,] > > > > > > #modeloRF > > > > resultadoRF <- list() > > > > modelo.rf<-randomForest(respuesta~,train) > > > > prediccion<-predict(modelo.rf,test) > > > > fp<-table(prediccion,test$respuesta)[2,1] > > fn<-table(prediccion,test$respuesta)[1,2] > > error<-(fp+fn)/nrow(train.balanceado) > > resultadoRF[[i]]<-rbind(resultado,data.frame(error=error,modelo="rf")) > > > > #modelo SVM > > > > resultadoSVM <- list() > > > > modelo.svm<-svm(respuesta~,train) > > > > prediccion<-predict(modelo.svm,test) > > > > fp<-table(prediccion,test$respuesta)[2,1] > > fn<-table(prediccion,test$respuesta)[1,2] > > error<-(fp+fn)/nrow(train.balanceado) > > resultadoSVM[[i]]<-rbind(resultado,data.frame(error=error,modelo="svm")) > > > > } > > > > Un saludo > > > > Isidro Hidalgo Arellano > > Observatorio del Mercado de Trabajo > > Consejería de Economía, Empresas y Empleo > > <http://www.castillalamancha.es/> http://www.castillalamancha.es/ > > > > > > > > De: Jesús Para Fernández [mailto: <mailto:[email protected]> > [email protected]] > Enviado el: viernes, 02 de junio de 2017 12:50 > Para: Isidro Hidalgo Arellano < <mailto:[email protected]> [email protected] > >; > <mailto:[email protected]> [email protected] > Asunto: Re: [R-es] CV en R > > > > Buenas, > > > > Puse los modelos lo mas simplificados, para centrar el tiro en el tema que > me preocupa. > > > > Es una pena no poder hablar cara a cara, porque por email puedo sonar algo > borde, pero no es así, al contrario estoy enormemente agradecido por tu > ayuda, pero le veo un problema. > > Me dices que use un list para ir guardando el modelo, pero tal y como he > propuesto en el bucle for, el modelo se crea 10 veces, es decir, que > entiendo que si es un randomForest, tendria que entonces hacer una > combinacion de esos 10 modelos con la funcion combine de RF para unir esos > modelos, verdad?? Porque sino estaria en el mismo problema, generando un > modelo generalista de una simple submuestra de los datos. > > > > Gracias por todo!!! > > Jesús > > > > _____ > > De: Isidro Hidalgo Arellano < <mailto:[email protected]> [email protected] > <mailto: <mailto:[email protected]> [email protected]> > > Enviado: viernes, 2 de junio de 2017 12:28 > Para: 'Jesús Para Fernández'; <mailto:[email protected]> > [email protected] > <mailto: <mailto:[email protected]> [email protected]> > > Asunto: RE: [R-es] CV en R > > > > > No me había fijado en el código, te había he contestado teóricamente. > > A ver, en ese código tienes varios problemas: > > - No especificas los parámetros del modelo (para eso es la > validación cruzada). En RF tendrías que especificar el número de árboles, > la > cantidad de puntos con los que acotar la regresión, etc. En SVM el tipo de > kernel que vas a usar, la sensibilidad… NO SE TRATA SÓLO de hacer modelos > con diferentes conjuntos de entrenamiento, sino de buscar los parámetros > que > mejor ajustan los datos. > > Te pongo un ejemplo: imagínate que tienes mucho ruido, en ese caso, en cada > punto de regresión, tendrás que tomar un número de puntos mayor (parámetro > "nodesize") > > - Respecto a no guardar los modelos, es muy fácil con una lista. > Cada modelo que hagas, guárdalo en un lista, junto con los datos de > resultados que quieras (incluyendo los parámetros de especificación del > modelo) > > Te recomiendo 2 cosas: > > - Usa el paquete caret > > - Lee este libro: > <https://link.springer.com/book/10.1007/978-1-4614-6849-3> > https://link.springer.com/book/10.1007/978-1-4614-6849-3 > > Con el libro matas varios pájaros de un tiro: > > - Aprendes algo de teoría (poca), que siempre viene bien > > - El autor es el creador del paquete caret > > Si tienes tiempo, yo buscaría un curso del MIT que es muy bueno, aunque de > los duros, te lo tienes que programar casi todo desde 0, pero cuando > acabas, > la teoría (con éste sí) la has machacado bastante bien, y sabes lo que hace > un SVM, un RF. Es éste: > > <https://www.edx.org/course/learning-data-introductory- > machine-caltechx-cs11 > 56x > <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x> > > > https://www.edx.org/course/learning-data-introductory- > machine-caltechx-cs115 > 6x > <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x> > > > > > < > <https://www.edx.org/course/learning-data-introductory- > machine-caltechx-cs11 > 56x > <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x> > > > https://www.edx.org/course/learning-data-introductory- > machine-caltechx-cs11 > 56x > <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x> > > > > > < > <https://www.edx.org/course/learning-data-introductory- > machine-caltechx-cs11 > > > https://www.edx.org/course/learning-data-introductory- > machine-caltechx-cs11 > 56x > <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>> > Learning From Data (Introductory Machine Learning) | edX > > <http://www.edx.org> www.edx.org < <http://www.edx.org> > http://www.edx.org> > > Introductory Machine Learning course covering theory, algorithms and > applications. Our focus is on real understanding, not just "knowing." > > > > Tiene un libro asociado que está muy bien también. > > Si te da miedito, hay otro más suave, de los clásicos Hastie y Tibshirani: > > <https://lagunita.stanford.edu/courses/HumanitiesSciences/ > StatLearning/Winte > r2016/about > <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about> > > > https://lagunita.stanford.edu/courses/HumanitiesSciences/ > StatLearning/Winter > 2016/about > <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about> > > > > < > <https://lagunita.stanford.edu/courses/HumanitiesSciences/ > StatLearning/Winte > r2016/about > <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about> > > > https://lagunita.stanford.edu/courses/HumanitiesSciences/ > StatLearning/Winte > r2016/about > <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>> > Statistical Learning | Stanford Lagunita > > <http://lagunita.stanford.edu> lagunita.stanford.edu > > StatLearning now self paced! The active course run for Statistical Learning > has ended, but the course is now available in a self paced mode. You are > welcome to join ... > > > > Éstos también tienen 2 libros muy buenos. El resumido es en el que se basa > el curso anterior. > > > > De: Jesús Para Fernández [mailto: <mailto:[email protected]> > [email protected]] > Enviado el: viernes, 02 de junio de 2017 12:04 > Para: Isidro Hidalgo Arellano < <mailto:[email protected]> [email protected] > <mailto: <mailto:[email protected]> [email protected]> >; > <mailto:[email protected]> [email protected] <mailto: > <mailto:[email protected]> [email protected]> > Asunto: Re: [R-es] CV en R > > > > Es que es justo ahi donde no se como hacerlo. > > Es decir, dentro del bucle for hago las comprobaciones train test, y me da > que de media el mejor es randomForest, pero claro, no me estoy quedando con > el modelo, ya que no se va guardando....Entonces es cuando no se como > seguir > para quedarme con ese modelo.... > > > > > > > > > > _____ > > De: Isidro Hidalgo Arellano < <mailto: <mailto:[email protected]> > [email protected]> <mailto:[email protected]> [email protected]> > Enviado: viernes, 2 de junio de 2017 11:59 > Para: 'Jesús Para Fernández'; <mailto: <mailto:[email protected]> > [email protected]> > <mailto:[email protected]> [email protected] > Asunto: RE: [R-es] CV en R > > > > No, no. Si construyes el modelo con todos los datos, explícame para qué te > ha servido la validación cruzada... ¿Sólo para saber si funciona mejor SVM > o > RF con ese conjunto de datos? Eso es insuficiente. > Cuando construyes un modelo, lo haces entrenando con datos que el modelo NO > VE, ahí está la gracia... > Te tienes que quedar con el mejor modelo entrenado. Y después ver cómo te > funciona en la vida real, es decir, con nuevos datos que el modelo NO HA > VISTO. > > Un saludo. > > > Isidro Hidalgo Arellano > Observatorio del Mercado de Trabajo > Consejería de Economía, Empresas y Empleo > < <http://www.castillalamancha.es/> http://www.castillalamancha.es/> > <http://www.castillalamancha.es/> http://www.castillalamancha.es/ > > > < <http://www.castillalamancha.es/> http://www.castillalamancha.es/> > Inicio > | Gobierno de Castilla-La Mancha > > < <http://www.castillalamancha.es> http://www.castillalamancha.es> > <http://www.castillalamancha.es> www.castillalamancha.es > > Web oficial del gobierno autonómico de Castilla-La Mancha con información > sobre actividad administrativa, economía, educación, sanidad, servicios > sociales, sede ... > > > > > > > -----Mensaje original----- > De: R-help-es [ <mailto: <mailto:[email protected]> > [email protected]> > mailto: <mailto:[email protected]> > [email protected]] En nombre de Jesús > Para Fernández > Enviado el: viernes, 02 de junio de 2017 11:48 > Para: <mailto: <mailto:[email protected]> [email protected]> > <mailto:[email protected]> [email protected] > > > Asunto: [R-es] CV en R > > Buenas, > > > Estoy haciendo modelos y comparando cual es mejor. Para ello, uso CV de 10 > folds. > > > Por ejemplo, hago la comparativa entre un svm y un randomForest para una > serie de datos, por ello hago: > > > midataset<-import..... > > > #datos es un dataframe de 1500 filas y 15 variables > > > for(i in 1:10){ > > numeros<-sample(1:1500,1500*0.7) > > train<-datos[numeros,] > > test<-datos[-numeros,] > > > #modeloRF > > modelo.rf<-randomForest(respuesta~,train) > > prediccion<-predict(modelo.rf,test) > > fp<-table(prediccion,test$respuesta)[2,1] > fn<-table(prediccion,test$respuesta)[1,2] > error<-(fp+fn)/nrow(train.balanceado) > resultado<-rbind(resultado,data.frame(error=error,modelo="rf")) > > #modelo SVM > > > modelo.svm<-svm(respuesta~,train) > > prediccion<-predict(modelo.svm,test) > > fp<-table(prediccion,test$respuesta)[2,1] > fn<-table(prediccion,test$respuesta)[1,2] > error<-(fp+fn)/nrow(train.balanceado) > resultado<-rbind(resultado,data.frame(error=error,modelo="svm")) > > } > > > Mi pregunta es la siguiente. Si el modelo de RF es mejor, como me quedo con > el modelo final? Tengo que crear el modelo de nuevo, sin tener en cuenta el > train? > > > modelo.final<-randomForest(respuesta~.,datos) > > > Gracias!!!! > > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > > <mailto: <mailto:[email protected]> [email protected]> > <mailto:[email protected]> [email protected] > < <https://stat.ethz.ch/mailman/listinfo/r-help-es> > https://stat.ethz.ch/mailman/listinfo/r-help-es> > > <https://stat.ethz.ch/mailman/listinfo/r-help-es> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > <mailto:[email protected]> [email protected] > <https://stat.ethz.ch/mailman/listinfo/r-help-es> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > > -- > > Saludos, > Carlos Ortega > <http://www.qualityexcellence.es> www.qualityexcellence.es > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > [email protected] > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > -- > > *Manuel Spínola, Ph.D.* > Instituto Internacional en Conservación y Manejo de Vida Silvestre > Universidad Nacional > Apartado 1350-3000 > Heredia > COSTA RICA > [email protected] <[email protected]> > [email protected] > Teléfono: (506) 8706 - 4662 > Personal website: Lobito de río > <https://sites.google.com/site/lobitoderio/> > Institutional website: ICOMVIS <http://www.icomvis.una.ac.cr/> > -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-help-es
