No es que me parezca mal, pero es mucho mejor, como te hemos recomendado, que uses "caret". Te simplificar� mucho la vida, y te proporcionar� visualizaciones de los resultados de la validaci�n que est�n muy bien.
En fin, suerte. De: Jes�s Para Fern�ndez [mailto:j.para.fernan...@hotmail.com] Enviado el: viernes, 02 de junio de 2017 15:06 Para: Isidro Hidalgo Arellano <ihida...@jccm.es>; 'Carlos Ortega' <c...@qualityexcellence.es> CC: 'Lista R' <r-help-es@r-project.org> Asunto: Re: [R-es] CV en R El problema es que no se como ir guardando esos modelos. Lo que he hecho finalmente es lo siguiente: Creo los modelos con validacion cruzada (en total 10 modelos por algoritmo, ya que hago 10 folds). Una vez hecho eso, me quedo con el mejor grupo de 10 modelos. Por ejemplo, randomForest con 500 arboles y nodeside4 (tengo 10 resultados para ese modelo). Entonces, como ese modelo no lo he podido guardar (por ignorancia de no saber como guardarlos), vuelvo a crearlos de nuevo a parte, los 10, haciendo de nuevo un train del 70% y le hago el predict, pero ya sobre el test definitivo que quiero probar. Esa prediccion la voy guardando en una matriz de mfilasx10 columnas, y luego hago la media de esas 10 columnas, fila a fila, con lo que tengo la predicci�n global para el modelo. �Os parece muy incorrecto? A mi me parece una buena t�cnica, aunque poco eficiente, ya que vuelvo a generar 10 veces un modelo que ya habia geneardo esas 10 veces. Un saludo Jes�s _____ De: Isidro Hidalgo Arellano <ihida...@jccm.es <mailto:ihida...@jccm.es> > Enviado: viernes, 2 de junio de 2017 14:35 Para: 'Jes�s Para Fern�ndez'; 'Carlos Ortega' Cc: 'Lista R' Asunto: RE: [R-es] CV en R 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/ <http://www.castillalamancha.es/> Inicio | Gobierno de Castilla-La Mancha www.castillalamancha.es <http://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: Jes�s Para Fern�ndez [mailto:j.para.fernan...@hotmail.com] Enviado el: viernes, 02 de junio de 2017 14:21 Para: Carlos Ortega <c...@qualityexcellence.es <mailto:c...@qualityexcellence.es> > CC: Lista R <r-help-es@r-project.org <mailto:r-help-es@r-project.org> >; Isidro Hidalgo Arellano <ihida...@jccm.es <mailto:ihida...@jccm.es> > 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:c...@qualityexcellence.es> c...@qualityexcellence.es> 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:ihida...@jccm.es> ihida...@jccm.es> 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:j.para.fernan...@hotmail.com> j.para.fernan...@hotmail.com] Enviado el: viernes, 02 de junio de 2017 12:50 Para: Isidro Hidalgo Arellano < <mailto:ihida...@jccm.es> ihida...@jccm.es>; <mailto:r-help-es@r-project.org> r-help-es@r-project.org 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:ihida...@jccm.es> ihida...@jccm.es <mailto: <mailto:ihida...@jccm.es> ihida...@jccm.es> > Enviado: viernes, 2 de junio de 2017 12:28 Para: 'Jes�s Para Fern�ndez'; <mailto:r-help-es@r-project.org> r-help-es@r-project.org <mailto: <mailto:r-help-es@r-project.org> r-help-es@r-project.org> 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-cs115 6x < <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11 56x> https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11 56x> < <https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11 > https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11 56x> 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/Winter 2016/about < <https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winte r2016/about> https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winte r2016/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:j.para.fernan...@hotmail.com> j.para.fernan...@hotmail.com] Enviado el: viernes, 02 de junio de 2017 12:04 Para: Isidro Hidalgo Arellano < <mailto:ihida...@jccm.es> ihida...@jccm.es <mailto: <mailto:ihida...@jccm.es> ihida...@jccm.es> >; <mailto:r-help-es@r-project.org> r-help-es@r-project.org <mailto: <mailto:r-help-es@r-project.org> r-help-es@r-project.org> 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:ihida...@jccm.es> ihida...@jccm.es> <mailto:ihida...@jccm.es> ihida...@jccm.es> Enviado: viernes, 2 de junio de 2017 11:59 Para: 'Jes�s Para Fern�ndez'; <mailto: <mailto:r-help-es@r-project.org> r-help-es@r-project.org> <mailto:r-help-es@r-project.org> r-help-es@r-project.org 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:r-help-es-boun...@r-project.org> r-help-es-boun...@r-project.org> mailto: <mailto:r-help-es-boun...@r-project.org> r-help-es-boun...@r-project.org] En nombre de Jes�s Para Fern�ndez Enviado el: viernes, 02 de junio de 2017 11:48 Para: <mailto: <mailto:r-help-es@r-project.org> r-help-es@r-project.org> <mailto:r-help-es@r-project.org> r-help-es@r-project.org 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:R-help-es@r-project.org> R-help-es@r-project.org> <mailto:R-help-es@r-project.org> R-help-es@r-project.org < <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:R-help-es@r-project.org> R-help-es@r-project.org <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 R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es