## cambiar número de árboles en el bosque; por omisión, 500 árboles
bosque <- randomForest (diabetes ~ ., Pi, ntree=10000)
getTree (bosque, 9999, TRUE) # extraer el árbol 9999
## para determinar número necesario de árboles
plot (bosque$err.rate[,2],type="l")
plot (bosque$err.rate[,3],type="l")
## limitar el tamaño de los árboles
bosque <- randomForest (diabetes ~ ., Pi, nodesize=200)
getTree (bosque, 1, TRUE) # tamaño máximo de las hojas (1 por omisión)
bosque <- randomForest (diabetes ~ ., Pi, maxnodes=5)
getTree (bosque, 1, TRUE) # número máximo de hojas (ilimitado por omisión)
## cambiar número de los predictores usados en cada árbol;
## por omisión, un tercio para clasificación y la raíz cuadrada para regresión
bosque <- randomForest (diabetes ~ ., Pi, mtry=5) # por omisión 2 en este caso
bosque <- randomForest (diabetes ~ ., Pi, importance=TRUE)
bosque$importance # diferencia en precisión
bosque$importanceSD # errores típicos de las importancias
bosque <- randomForest (diabetes ~ ., Pi, localImp=TRUE)
LI <- bosque$localImp # matriz [i,j] = importancia de i en caso j
LI[,tail(order(apply(LI,2,max)))] # casos más relevantes
bosque <- randomForest (diabetes ~ ., Pi, proximity=TRUE)
bosque$proximity
plot (cmdscale (1-bosque$proximity), col=bosque$y) # rojos=positivos
## para usar 63,2% sin reposición en vez de butstrap
bosque <- randomForest (diabetes ~ ., Pi, replace=FALSE)
## para ponderar las clases;
## los pesos no necesitan sumar uno; de hecho, han de ser muy diferentes
bosque <- randomForest (diabetes ~ ., Pi, replace=FALSE)
bosque$confusion
bosque <- randomForest (diabetes ~ ., Pi, replace=FALSE,
classwt=c(pos=1e6,neg=1))
bosque$confusion
## pueden usarse etiquetas ("neg","pos" en este caso) o el orden de niveles
## otra forma de "ponderar" las clases
## la clase elegida es aquella con mayor %votos / cutoff
bosque <- randomForest (diabetes ~ ., Pi, replace=FALSE,
cutoff=c(neg=.6,pos=.3)) # en este caso, .5 por omisión
bosque$confusion