[R-es] Random Forests

Manuel Mendoza mmendoza en mncn.csic.es
Sab Ene 20 18:17:34 CET 2018


Si, Carlos. Yo hago lo mismo, pero esos mismos numeritos salen enormes.

> treesize(RFfit)

   [1] 4304 4302 4311 4319 4343 4298 4298 4311 4349 4327 4331 4317  
4294 4321 4283 4362
   [17] 4300 4330 4266 4331 4308 4352 4294 4315 4372 4349 4331 4347  
4329 4348 4298 4335
   [33] 4346 4396 4345 4313 4293 4276 4353 4272 4304 4325 4317 4336  
4308 4351 4374 4324
   [49] 4386 4359 4311 4346 4300 4332 4336 4376 4319 4322 4344 4324  
4324 4359 4342 4378
   [65] 4344 4324 4314 4318 4344 4311 4359 4304 4288 .... hasta 1000

Con mtry le indicas el nº de variables que los árboles utilizarán  
(recomendado m=√p para árboles de clasificación, y m = p/3 para los de  
regresión), y con ntree el nº de árboles. Pero no encuentro cómo  
indicarle, aunque sea, un tamaño máximo para los árboles, y en  
cualquier caso, me parece extraño que se generen árboles con  
tantísimos nodos. Mi df tiene unas 13.000 entradas y 19 variables,  
pero eso no es nada especial para que me hiciese árboles tan grandes.

No entiendo



Quoting Carlos Ortega <cof en qualityexcellence.es>:

> Hola,
>
> No. Mira el ejemplo:
>
>> data(iris)
>> iris.rf <- randomForest(Species ~ ., iris)
>> hist(treesize(iris.rf))
>> treesize(iris.rf)
>   [1]  7 10 13  7 10  6  9  8  7  9  8  8  6  8  7  9  7 10  6 16  4 13 11
> 10  8 11 10  8  7  9  9  6 11  7  5 10 12 10  7 12 12  8 11 10
>  [45] 10 10  9 11  8  6  7 12  9  9  7  6 10  9 10  7  8  8  8  7  8 12  7
> 11 12  8  7  7  6  9  9  6  6 11  3  9 12 11 13  9  9  7  7 12
>  [89] 11  6  6  8  6 11  9 10 10  6  7 14  7 10  8  7  9 11  7 14  7  7  8
> 9  7  6  9  8  9  8 13  9 10 10  9 11  6  7  9 10  8  9  9  6
> [133]  9  8 10  9 11  8  6  7 13  6  6  9  5 14  8 10 13 10 12 13 11 12 10
> 9 12  9 13 10  9 11  7 10 10  9  9  8  6  5  9  9 11 10  8 10
> [177]  4 10 12 10 10  8 10 11  9  5  7  8  8 15  8  7  7  9 12  9 10  9 12
> 8 10  8 11  9  6  7  9 12  7  8 10 12  6 14 11  4  6  6  7  9
> [221] 10 11 13  5  8 10  7 10 10 12 10 11 11  8  9 11  9  9  9 10  6 10  7
> 10 10 14  9 10  6 10  6  8  6  9  9 10 10 10 10  9 10 10  8 14
> [265]  8 11  6 11  9  9  9  8 11  7  8 11  8  4  9 11  6  8 10  8  9 10  8
> 9  8 11 11  9 12 14  7  9  8  9 10 10 11  8 12 12 12  4 10 11
> [309]  8  8 11  9  9  8 10  9  4 10 10  6 13 10 12  9 10  9  5  9  7  4  7
> 15  7  8  7 11  7 11 12  5 12  7  9  8 13 14  9  9  9  9  6 13
> [353] 13  7 10  6  5  6 10  6  8  8  9 11  9 11  7  7 11  8  6 10 13  7 12
> 11 14  7 10 11  9  8  6  8 10  8  9  6 10 10  6  7  7  7 11 13
> [397]  8  5  7 14 10 14  8  9  6 11  9 11 10  9  8  7 11 10 10 11  8 10 12
> 9  8  8  9  9  9  9  9  5  9  7 13 10 11  8 10  9 10 12  8 12
> [441]  9 10  4  7 11  7 10  4  6 13  8  7 10  9  7  6  8  9  7 11  8  8  9
> 10  5  8 11 12  6  5 10 10  6 10 10  5 10 13  9 13 10 10  6 12
> [485]  8  7  9 12 10  9  7  7 14  6  9  6  6  8 10  6
>> vtmp <- treesize(iris.rf)
>> sum(vtmp)
>
> Por defecto al no especificar nada, el "ntrees" de randomForest() es 500.
> Efectivamente generas 500 árboles como ves en el número de elementos que
> devuelve "treesize(iris.rf)".
>
> Y cada árbol, tiene el número de nodos que ves en el valor de cada uno de
> los elementos que igualmente devuelve "treesize(iris.rf)": 7, 10, 13...
>
> Gracias,
> Carlos
>
> El 20 de enero de 2018, 10:36, Manuel Mendoza <mmendoza en mncn.csic.es>
> escribió:
>
>>
>> Gracias Carlos y Javier, ntrees es el nº de árboles y treesize sus
>> respectivos tamaños (nº de nodos)
>>
>> ntree: Number of trees to grow. This should not be set to too small ......
>>
>> treesize: Size of trees (number of nodes) in and ensemble.
>>
>>
>> Puse 1000 árboles (ntree=1000), si, pero la función treesize te da el nº
>> de nodos:
>>
>> treesize(RFfit, terminal=TRUE) me da un vector de 1000 elementos (uno por
>> cada árbol), todos ellos mayores que 4000 ????
>>
>> ¿tienen los 1000 árboles más de 4000 nodos cada uno? Parece extraño ¿no?
>>
>> Esa es mi pregunta
>>
>> Gracias nuevamente,
>> Manuel
>>
>>
>>
>>
>>
>>
>> Quoting Carlos Ortega <cof en qualityexcellence.es>:
>>
>> Hola,
>>>
>>> A "treesize()" le tienes que pasar como parámetro el objeto randomForest
>>> de
>>> tu modelo.
>>> Y obtiene el número de nodos de cada uno de los árboles que hayas indicado
>>> en el valor del parámetros "ntrees" de "randomForest". Por defecto
>>> "ntrees"
>>> tiene un valor de 500.
>>> Mira qué valor tiene "ntrees" en tu modelo "randomForest", que seguramente
>>> le hayas indicado un valor de 1000...
>>>
>>> Saludos,
>>> Carlos Ortega
>>> www.qualityexcellence.es
>>>
>>> El 17 de enero de 2018, 14:29, Manuel Mendoza <mmendoza en mncn.csic.es>
>>> escribió:
>>>
>>> Buenas tardes a todos. El paquete randomForest tiene la función treesize,
>>>> que es el nº de nodos. Me dan valores realmente elevados (en torno a
>>>> 1000),
>>>> y eso me parece extraño. ¿sabéis si es así?
>>>> Gracias,
>>>> Manuel
>>>> --
>>>> Dr Manuel Mendoza
>>>> Department of Biogeography and Global Change
>>>> National Museum of Natural History (MNCN)
>>>> Spanish Scientific Council (CSIC)
>>>> C/ Serrano 115bis, 28006 MADRID
>>>> Spain
>>>>
>>>> _______________________________________________
>>>> 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
>>>
>>
>>
>> --
>> Dr Manuel Mendoza
>> Department of Biogeography and Global Change
>> National Museum of Natural History (MNCN)
>> Spanish Scientific Council (CSIC)
>> C/ Serrano 115bis, 28006 MADRID
>> Spain
>>
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es


-- 
Dr Manuel Mendoza
Department of Biogeography and Global Change
National Museum of Natural History (MNCN)
Spanish Scientific Council (CSIC)
C/ Serrano 115bis, 28006 MADRID
Spain



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