Florestas aleatórias com ranger
Treine modelos de floresta aleatória, ajuste mtry e ntrees e avalie o erro OOB.
Florestas aleatórias com ranger é uma aula grátis de R Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.
O que é uma floresta aleatória
Uma floresta aleatória constrói muitas árvores de decisão com amostras bootstrap dos dados e, em seguida, calcula a média de suas previsões (regressão) ou realiza uma votação majoritária (classificação). Duas fontes de aleatoriedade dão nome ao conjunto: a amostragem bootstrap das linhas e a seleção aleatória de características em cada divisão.
library(ranger)
# Minimal random forest: 500 trees, auto mtry
rf <- ranger(
medv ~ .,
data = MASS::Boston,
num.trees = 500
)
print(rf)O parâmetro mtry
mtry é o número de características consideradas aleatoriamente em cada divisão. Usar menos características do que o total descorrelaciona as árvores, reduzindo a variância. A regra prática é mtry = sqrt(p) para classificação e mtry = p/3 para regressão, em que p é o número de variáveis preditoras.
p <- ncol(MASS::Boston) - 1 # number of predictors
rf_class <- ranger(
Species ~ ., data = iris,
num.trees = 500,
mtry = floor(sqrt(4)) # sqrt(p) for classification
)
rf_reg <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = floor(p / 3) # p/3 for regression
)
cat('Classification OOB Error:', rf_class$prediction.error)
cat('Regression OOB RMSE:', sqrt(rf_reg$prediction.error))Erro OOB — Validação gratuita
Como cada árvore é treinada com uma amostra bootstrap, aproximadamente um terço das observações fica de fora (out-of-bag, OOB). Essas amostras OOB funcionam como um conjunto de validação integrado para cada árvore. O erro OOB agregado é uma estimativa quase não enviesada do erro de teste — não é necessário um conjunto de validação separado.
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = 4
)
# OOB MSE
cat('OOB MSE:', rf$prediction.error)
# OOB RMSE
cat('OOB RMSE:', sqrt(rf$prediction.error))
# For classification: OOB error rate
rf_cl <- ranger(Species ~ ., data = iris)
cat('OOB Error Rate:', rf_cl$prediction.error)Importância das variáveis
Definir importance = 'impurity' registra a redução total da impureza dos nós (Gini ou MSE) para cada característica em todas as árvores. Definir importance = 'permutation' mede a perda de acurácia quando cada característica é embaralhada aleatoriamente — essa abordagem é mais confiável, mas mais lenta.
rf_imp <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
importance = 'impurity'
)
# Sorted importance scores
imp <- sort(rf_imp$variable.importance, decreasing = TRUE)
print(imp)
# Quick plot
barplot(imp, las = 2, col = 'steelblue',
main = 'Random Forest Variable Importance')Previsões com ranger
Use predict(rf, data = test) para gerar previsões. O resultado é uma lista; acesse as previsões com $predictions. Na classificação, as previsões são níveis de factor por padrão.
set.seed(1)
idx <- sample(nrow(MASS::Boston), 400)
train <- MASS::Boston[idx, ]
test <- MASS::Boston[-idx, ]
rf <- ranger(medv ~ ., data = train, num.trees = 500)
pred <- predict(rf, data = test)
test_rmse <- sqrt(mean((pred$predictions - test$medv)^2))
cat('Test RMSE:', round(test_rmse, 3))Conceito de matriz de confusão
Na classificação, uma matriz de confusão cruza as classes reais com as previstas. Entre as principais métricas derivadas dela estão acurácia, precisão (TP / (TP + FP)), revocação (TP / (TP + FN)) e pontuação F1. ranger fornece diretamente uma matriz de confusão OOB.
rf_cl <- ranger(
Species ~ ., data = iris,
num.trees = 500,
mtry = 2
)
# OOB confusion matrix
print(rf_cl$confusion.matrix)
# OOB error rate
cat('OOB Error Rate:', rf_cl$prediction.error)
# Manual accuracy on OOB predictions
# (1 - error rate)
cat('OOB Accuracy:', 1 - rf_cl$prediction.error)Ajuste de mtry e num.trees
Mais árvores sempre reduzem a variância (até que os ganhos diminuam por volta de 300 a 500). O parâmetro mtry tem um ponto ideal. Um ciclo simples de ajuste avalia o erro OOB em uma grade de valores de mtry para encontrar o valor ideal sem validação cruzada.
mtry_vals <- c(2, 4, 6, 8, 10)
oob_errors <- sapply(mtry_vals, function(m) {
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 300, mtry = m
)
rf$prediction.error
})
best_mtry <- mtry_vals[which.min(oob_errors)]
cat('Best mtry:', best_mtry)
plot(mtry_vals, sqrt(oob_errors), type = 'b',
xlab = 'mtry', ylab = 'OOB RMSE')ranger para classificação
Para classificação, defina probability = TRUE para obter previsões de probabilidade das classes em vez de rótulos categóricos. Isso é necessário para calcular a curva ROC e obter estimativas de probabilidade calibradas, além de corresponder ao formato de saída esperado pelas métricas do yardstick.
# Ensure the target is a factor
iris$Species <- as.factor(iris$Species)
rf_prob <- ranger(
Species ~ ., data = iris,
num.trees = 300,
probability = TRUE # output class probabilities
)
# Predictions are a matrix of probabilities
pred_prob <- predict(rf_prob, data = iris[1:5, ])
print(pred_prob$predictions)Paralelismo no ranger
ranger foi projetado para oferecer velocidade e paralelismo. Defina num.threads para usar todos os núcleos de CPU disponíveis. Isso pode proporcionar ganhos expressivos de velocidade em relação ao pacote mais antigo randomForest, especialmente em grandes conjuntos de dados com muitas árvores.
# Use all available cores
rf_fast <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 1000,
mtry = 4,
num.threads = parallel::detectCores()
)
cat('Trees:', rf_fast$num.trees)
cat('Threads used:', rf_fast$num.threads)
cat('OOB RMSE:', sqrt(rf_fast$prediction.error))ranger via tidymodels
Você pode usar ranger por meio da interface do tidymodels, que fornece uma sintaxe consistente e se integra a fluxos de trabalho, validação cruzada e ajuste de hiperparâmetros. Especifique o mecanismo como 'ranger' e passe os argumentos específicos do mecanismo com set_engine().
library(parsnip)
library(workflows)
rf_spec <- rand_forest(
mtry = tune(),
trees = 500,
min_n = tune()
) |>
set_engine('ranger', importance = 'impurity') |>
set_mode('regression')
wf <- workflow() |>
add_recipe(rec) |>
add_model(rf_spec)
print(wf)Interpretação da saída do ranger
O modelo ranger impresso mostra: número de árvores, variável-alvo, número de características usadas, erro de previsão OOB e R-quadrado (para regressão). Sempre verifique o erro OOB como uma checagem rápida de plausibilidade — se ele for extremamente baixo em um conjunto de dados grande, suspeite de vazamento de dados.
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500, mtry = 4,
importance = 'impurity'
)
# Key output fields
cat('OOB MSE: ', rf$prediction.error, '\n')
cat('OOB RMSE: ', sqrt(rf$prediction.error), '\n')
cat('R-squared: ', rf$r.squared, '\n')
cat('Num trees: ', rf$num.trees, '\n')
cat('Num features: ', rf$num.independent.variables, '\n')Verificação rápida
Em uma floresta aleatória construída com ranger, o que o erro OOB (out-of-bag) estima?
Recapitulação sobre florestas aleatórias
Principais conclusões sobre Florestas Aleatórias com ranger:
- As florestas aleatórias combinam muitas árvores construídas com amostras bootstrap e seleção aleatória de características em cada divisão.
mtry: sqrt(p) para classificação, p/3 para regressão; ajuste esse parâmetro.- O erro OOB fornece uma estimativa de validação gratuita e quase não enviesada.
importance = 'impurity'ou'permutation'fornece pontuações de importância das variáveis.- Defina
probability = TRUEpara obter saídas de probabilidade das classes na classificação. - ranger é altamente paralelizado; use
num.threadspara grandes conjuntos de dados. - Integre-o ao tidymodels com
rand_forest() |> set_engine('ranger').
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = 4,
importance = 'impurity',
num.threads = parallel::detectCores()
)
cat('OOB RMSE:', sqrt(rf$prediction.error))
cat('R2:', rf$r.squared)
print(sort(rf$variable.importance, decreasing = TRUE))Perguntas Frequentes
A aula “Florestas aleatórias com ranger” é grátis?
Sim — o texto completo de “Florestas aleatórias com ranger” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.
O que vou aprender em “Florestas aleatórias com ranger”?
Treine modelos de floresta aleatória, ajuste mtry e ntrees e avalie o erro OOB. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar R Academy?
Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Florestas aleatórias com ranger”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de R Academy?
Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Árvores de decisão: base dos conjuntos
- Florestas aleatórias com ranger
- Boosting de gradiente com xgboost
- Importância de atributos e interpretação de modelos