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 www.qualityexcellence.es El 2 de junio de 2017, 13:06, Isidro Hidalgo Arellano <[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/ > > > > > > > > De: Jesús Para Fernández [mailto:[email protected]] > Enviado el: viernes, 02 de junio de 2017 12:50 > Para: Isidro Hidalgo Arellano <[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 <[email protected] <mailto:[email protected]> > > Enviado: viernes, 2 de junio de 2017 12:28 > Para: 'Jesús Para Fernández'; [email protected] > <mailto:[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 > > 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-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> Learning From Data (Introductory Machine Learning) | edX > > 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/Winter > 2016/about > > > > <https://lagunita.stanford.edu/courses/HumanitiesSciences/ > StatLearning/Winte > r2016/about> Statistical Learning | Stanford Lagunita > > 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:[email protected]] > Enviado el: viernes, 02 de junio de 2017 12:04 > Para: Isidro Hidalgo Arellano <[email protected] <mailto:[email protected]> > >; > [email protected] <mailto:[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:[email protected]> [email protected]> > Enviado: viernes, 2 de junio de 2017 11:59 > Para: 'Jesús Para Fernández'; <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/> 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 ... > > > > > > > -----Mensaje original----- > De: R-help-es [ <mailto:[email protected]> > mailto:[email protected]] En nombre de Jesús > Para Fernández > Enviado el: viernes, 02 de junio de 2017 11:48 > Para: <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:[email protected]> [email protected] > <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 > [email protected] > https://stat.ethz.ch/mailman/listinfo/r-help-es > -- 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
