paquete randomForest de R

Índice

1 Utilidades

cargar <- function (paquete)
{
    paquete <- as.character (substitute (paquete))
    if (! require (paquete, character.only=TRUE))
    {
        install.packages (paquete)
        library (paquete, character.only=TRUE)
    }
}

2 Datos de ejemplo

cargar (mlbench)
data (PimaIndiansDiabetes2)
P <- PimaIndiansDiabetes2

3 Imputar ausentes en insulina

cargar (randomForest)
Pi <- rfImpute (diabetes ~ ., P)

4 Uso básico

bosque <- randomForest (diabetes ~ ., Pi)
bosque$importance # relevancia de los predictores (decremento  de Gini)
bosque$confusion  # matriz de confusión absoluta y % de errores
bosque$predicted  # clasificación predicha
bosque$votes      # probabilidades de clasificación
bosque$oob.times  # número de veces en que cada individuo ha sido predicho
bosque$type       # tipo de bosque (clasificación o regresión)
bosque$ntree      # número de árboles
bosque$err.rate   # fila i: % no muestreado, % error; hasta árbol i-ésimo

5 Uso avanzado

## 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

Autor: Carlos Enrique Carleos Artime

Created: 2021-12-15 mié 19:07

Validate