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/

 

 

 

De: Manuel Spínola [mailto:mspinol...@gmail.com] 
Enviado el: viernes, 02 de junio de 2017 14:42
Para: Isidro Hidalgo Arellano <ihida...@jccm.es>
CC: Jesús Para Fernández <j.para.fernan...@hotmail.com>; Carlos Ortega 
<c...@qualityexcellence.es>; Lista R <r-help-es@r-project.org>
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)

 

Manuel

 

El 2 de junio de 2017, 6:35, Isidro Hidalgo Arellano <ihida...@jccm.es 
<mailto:ihida...@jccm.es> > 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:j.para.fernan...@hotmail.com 
<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 
<mailto:c...@qualityexcellence.es> >
c...@qualityexcellence.es <mailto: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> 


 <http://www.qualityexcellence.es/> QualityExcellence

 <http://www.qualityexcellence.es> www.qualityexcellence.es 
<http://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 <mailto:ihida...@jccm.es> > ihida...@jccm.es 
<mailto: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 
<mailto:j.para.fernan...@hotmail.com> >
j.para.fernan...@hotmail.com <mailto:j.para.fernan...@hotmail.com> ]
Enviado el: viernes, 02 de junio de 2017 12:50
Para: Isidro Hidalgo Arellano < <mailto:ihida...@jccm.es 
<mailto:ihida...@jccm.es> > ihida...@jccm.es <mailto:ihida...@jccm.es> >;
<mailto:r-help-es@r-project.org <mailto:r-help-es@r-project.org> > 
r-help-es@r-project.org <mailto: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 
<mailto:ihida...@jccm.es> > ihida...@jccm.es <mailto:ihida...@jccm.es> 
<mailto: <mailto:ihida...@jccm.es <mailto:ihida...@jccm.es> > ihida...@jccm.es 
<mailto: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 
<mailto:r-help-es@r-project.org> >
r-help-es@r-project.org <mailto:r-help-es@r-project.org> 
<mailto: <mailto:r-help-es@r-project.org <mailto:r-help-es@r-project.org> > 
r-help-es@r-project.org <mailto: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 
<https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
 
56x>
https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs115 
<https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
 
6x




<
<https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11 
<https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
 
56x>
https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11 
<https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
 
56x>


<
<https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11
>
https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs11 
<https://www.edx.org/course/learning-data-introductory-machine-caltechx-cs1156x>
 
56x> Learning From Data (Introductory Machine Learning) | edX

 <http://www.edx.org> www.edx.org <http://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 
<https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>
 
r2016/about>
https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter 
<https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>
 
2016/about



<
<https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winte 
<https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>
 
r2016/about>
https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winte 
<https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about>
 
r2016/about> Statistical Learning | Stanford Lagunita

 <http://lagunita.stanford.edu> lagunita.stanford.edu 
<http://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 
<mailto:j.para.fernan...@hotmail.com> >
j.para.fernan...@hotmail.com <mailto:j.para.fernan...@hotmail.com> ]
Enviado el: viernes, 02 de junio de 2017 12:04
Para: Isidro Hidalgo Arellano < <mailto:ihida...@jccm.es 
<mailto:ihida...@jccm.es> > ihida...@jccm.es <mailto:ihida...@jccm.es> 
<mailto: <mailto:ihida...@jccm.es <mailto:ihida...@jccm.es> > ihida...@jccm.es 
<mailto:ihida...@jccm.es> > >;
 <mailto:r-help-es@r-project.org <mailto:r-help-es@r-project.org> > 
r-help-es@r-project.org <mailto:r-help-es@r-project.org>  <mailto:
<mailto:r-help-es@r-project.org <mailto:r-help-es@r-project.org> > 
r-help-es@r-project.org <mailto: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 
<mailto:ihida...@jccm.es> >
ihida...@jccm.es <mailto:ihida...@jccm.es> >  <mailto:ihida...@jccm.es 
<mailto:ihida...@jccm.es> > ihida...@jccm.es <mailto: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 
<mailto:r-help-es@r-project.org> >
r-help-es@r-project.org <mailto:r-help-es@r-project.org> >
 <mailto:r-help-es@r-project.org <mailto:r-help-es@r-project.org> > 
r-help-es@r-project.org <mailto: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 
<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 ...






-----Mensaje original-----
De: R-help-es [ <mailto: <mailto:r-help-es-boun...@r-project.org 
<mailto:r-help-es-boun...@r-project.org> >
r-help-es-boun...@r-project.org <mailto:r-help-es-boun...@r-project.org> >
mailto: <mailto:r-help-es-boun...@r-project.org 
<mailto:r-help-es-boun...@r-project.org> >
r-help-es-boun...@r-project.org <mailto: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 
<mailto:r-help-es@r-project.org> > r-help-es@r-project.org 
<mailto:r-help-es@r-project.org> >
<mailto:r-help-es@r-project.org <mailto:r-help-es@r-project.org> > 
r-help-es@r-project.org <mailto: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 <mailto:R-help-es@r-project.org> > 
R-help-es@r-project.org <mailto:R-help-es@r-project.org> >
<mailto:R-help-es@r-project.org <mailto:R-help-es@r-project.org> > 
R-help-es@r-project.org <mailto: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 <mailto:R-help-es@r-project.org> > 
R-help-es@r-project.org <mailto: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 
<http://www.qualityexcellence.es> 


        [[alternative HTML version deleted]]


_______________________________________________
R-help-es mailing list
R-help-es@r-project.org <mailto:R-help-es@r-project.org> 
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 
mspin...@una.cr <mailto:mspin...@una.ac.cr>  
mspinol...@gmail.com <mailto:mspinol...@gmail.com>  
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/> 


        [[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a