[R-es] CV en R

Carlos Ortega cof en qualityexcellence.es
Vie Jun 2 13:11:07 CEST 2017


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 <ihidalgo en 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/
>
>
>
>
>
>
>
> De: Jesús Para Fernández [mailto:j.para.fernandez en hotmail.com]
> Enviado el: viernes, 02 de junio de 2017 12:50
> Para: Isidro Hidalgo Arellano <ihidalgo en jccm.es>; r-help-es en 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 <ihidalgo en jccm.es <mailto:ihidalgo en jccm.es> >
> Enviado: viernes, 2 de junio de 2017 12:28
> Para: 'Jesús Para Fernández'; r-help-es en r-project.org
> <mailto:r-help-es en 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
>
> 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:j.para.fernandez en hotmail.com]
> Enviado el: viernes, 02 de junio de 2017 12:04
> Para: Isidro Hidalgo Arellano <ihidalgo en jccm.es <mailto:ihidalgo en jccm.es>
> >;
> r-help-es en r-project.org <mailto:r-help-es en 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:ihidalgo en jccm.es> ihidalgo en jccm.es>
> Enviado: viernes, 2 de junio de 2017 11:59
> Para: 'Jesús Para Fernández';  <mailto:r-help-es en r-project.org>
> r-help-es en 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/> 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:r-help-es-bounces en r-project.org>
> mailto:r-help-es-bounces en r-project.org] En nombre de Jesús
> Para Fernández
> Enviado el: viernes, 02 de junio de 2017 11:48
> Para:  <mailto:r-help-es en r-project.org> r-help-es en 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:R-help-es en r-project.org> R-help-es en r-project.org
>  <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
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es