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]]
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/ -----Mensaje original----- De: R-help-es [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: 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 R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
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 <ihidalgo en jccm.es> Enviado: viernes, 2 de junio de 2017 11:59 Para: 'Jesús Para Fernández'; 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/ 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] En nombre de Jesús Para Fernández Enviado el: viernes, 02 de junio de 2017 11:48 Para: 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 R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Abundando en mi respuesta anterior, ni siquiera la validación cruzada es una medida perfecta del comportamiento del modelo a posteriori porque, aunque lo has construido con validación cruzada, y has escogido el que mejor se comporta con datos que "no ve", no sabes (quizá en tu caso sí, pero no tiene por qué ser así) cómo van a evolucionar los datos en la vida real, siendo muy posible, que tengas que ir renovando el modelo. Un saludo. Isidro Hidalgo Arellano Observatorio del Mercado de Trabajo Consejería de Economía, Empresas y Empleo http://www.castillalamancha.es/ -----Mensaje original----- De: Isidro Hidalgo Arellano [mailto:ihidalgo en jccm.es] Enviado el: viernes, 02 de junio de 2017 12:00 Para: 'Jesús Para Fernández' <j.para.fernandez en hotmail.com>; '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/ -----Mensaje original----- De: R-help-es [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: 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 R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Estimado Jesús Para Fernández Usted tiene unos datos que utilizó para entrenar, luego corrió dos modelos, y piensa que puede realizar otro modelo sin entrenamiento. Yo pienso que puede mejorar el modelo y realizar un entrenamiento a este nuevo modelo aunque sean los mismos datos, desconozco si puede resolver sin un entrenamiento previo, salvo que el algoritmo en caso de no especificarlo tome por defecto algunos datos de la muestra en forma predeterminada. En ese caso habría que leer la documentación (no lo se). Aunque usted usa casi lo mismo train<-datos[numeros,] test<-datos[-numeros,] ¿Qué pasa si el entrenamiento tiene por colocar cualquier número el 20% de la muestra? En un libro sobre aprendizaje estadístico decía que si el entrenamiento es muy bueno (como en su caso con los mismos datos y en cantidad), el modelo ajusta muy bien, pero al ingresar un solo dato los errores son ?grandes?, porque el modelo no esta preparado para ninguna otra situación, en cambio si se entrena con algunos, digamos como en su caso pero en lugar del 100 % de los datos el 99%, el modelo estaría ?preparado? para recibir un dato nuevo. Técnicamente no es todo correcto como lo escribí pero es la idea. Javier Rubén Marcuzzi De: Jesús Para Fernández Enviado: viernes, 2 de junio de 2017 6:48 Para: 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 R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Gracias por las respuestas, pero suponed lo siguiente: El proceso que genera los datos es estable en el tiempo (siempre genera los mismos) y la respuesta está perfectamente balanceada. Parto de nu conjunto de datos inicial, y un conjunto de datos test del que no se la respuesta. El conjunto inicial lo parto en train y test como puse antes para ir evaluando los modelos, pero luego me tengo que quedar con un modelo "definitivo" y ese modelo aplicarlo al test inicial que os comento. Mi pregunta es: ¿Cómo hago para quedarme con ese modelo definitivo? Os recuerdo mi codigo: 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")) } modelo.definitivo<-randomForest(respuesta~.,datos) ________________________________ De: Isidro Hidalgo Arellano <ihidalgo en jccm.es> Enviado: viernes, 2 de junio de 2017 12:05 Para: 'Jesús Para Fernández'; r-help-es en r-project.org Asunto: RE: [R-es] CV en R Abundando en mi respuesta anterior, ni siquiera la validación cruzada es una medida perfecta del comportamiento del modelo a posteriori porque, aunque lo has construido con validación cruzada, y has escogido el que mejor se comporta con datos que "no ve", no sabes (quizá en tu caso sí, pero no tiene por qué ser así) cómo van a evolucionar los datos en la vida real, siendo muy posible, que tengas que ir renovando el modelo. 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 ... -----Mensaje original----- De: Isidro Hidalgo Arellano [mailto:ihidalgo en jccm.es] Enviado el: viernes, 02 de junio de 2017 12:00 Para: 'Jesús Para Fernández' <j.para.fernandez en hotmail.com>; '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/ -----Mensaje original----- De: R-help-es [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: 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 R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]