library(randomForest)library(caret)library(magrittr)library(dplyr)dados_rf <- dados %>%select(-AREA_BASAL)# 3. Divisão dos Dados em Treino e Teste (usando a mesma metodologia)set.seed(123) # Para reprodutibilidadetrain_index_rf <-createDataPartition(dados_rf$VOLUME, p =0.9, list =FALSE)dados_treino_rf <- dados_rf[train_index_rf, ]dados_teste_rf <- dados_rf[-train_index_rf, ]# Separar a variável resposta (y) e as preditoras (x) no testey_test_rf <- dados_teste_rf$VOLUMEx_test_rf <- dados_teste_rf %>%select(-VOLUME)# 4. Treinamento do Modelo Random Forest# ntree: Número de árvores na floresta (um valor entre 500-1000 é um bom começo).# mtry: Número de variáveis testadas em cada "nó" da árvore. O padrão para regressão é (nº de variáveis / 3).set.seed(123) # Para reprodutibilidade do modelomodelo_rf <-randomForest( VOLUME ~ ., # Fórmula: prever VOLUME usando todas as outras variáveisdata = dados_treino_rf, # Usar os dados de treinontree =500, # Número de árvoresimportance =TRUE# Guardar a importância das variáveis)# 5. Visualizar o resultado do modeloprint(modelo_rf)
Call:
randomForest(formula = VOLUME ~ ., data = dados_treino_rf, ntree = 500, importance = TRUE)
Type of random forest: regression
Number of trees: 500
No. of variables tried at each split: 2
Mean of squared residuals: 372.5155
% Var explained: 85.8
# O resultado mostrará o "Mean of squared residuals" (MSE) e "% Var explained" (R²)# calculados internamente nos dados de "out-of-bag" (uma forma de validação cruzada)# 6. Fazer Previsões no Conjunto de Testey_pred_rf <-predict(modelo_rf, newdata = x_test_rf)# 7. Avaliar a Performance do Modelo (comparando com o seu Ridge)R2_rf <-cor(y_test_rf, y_pred_rf)^2rmse_rf <-sqrt(mean((y_test_rf - y_pred_rf)^2))mae_rf <-mean(abs(y_test_rf - y_pred_rf))mape_rf <-mean(abs((y_test_rf - y_pred_rf) / y_test_rf)) *100# 8. Apresentar os resultadoscat("\n--- Performance do Modelo Random Forest ---\n")
# Criar um gráfico de importânciavarImpPlot(modelo_rf, main ="Importância das Variáveis - Random Forest",pch =16, # Formato do pontocol ="blue") # Cor
# O gráfico é gerado diretamente a partir do objeto do modelo salvoplot(modelo_rf, main ="Erro do Modelo vs. Número de Árvores")legend("topright", legend ="Erro OOB", col ="blue", lty =3)
# Criar um dataframe com os valores reais e previstosresultados_rf <-data.frame(Reais = y_test_rf, # y_test_rf do seu script anteriorPrevistos = y_pred_rf # y_pred_rf do seu script anterior)# Gerar o gráficoggplot(resultados_rf, aes(x = Reais, y = Previstos)) +geom_point(alpha =0.6, color ="blue") +geom_abline(intercept =0, slope =1, color ="red", linetype ="dashed", size =1) +labs(title ="Random Forest: Valores Previstos vs. Reais",subtitle ="A linha vermelha representa a previsão perfeita",x ="Volume Real",y ="Volume Previsto" ) +theme_minimal() +coord_fixed() # Garante que a escala dos eixos seja a mesma (1:1)
# 1. Carregar Pacotes library(rpart)library(rpart.plot)# 2. Construir uma ÚNICA Árvore de Decisão# Usamos o método "anova" para regressão (prever um número contínuo)arvore_decisao <-rpart( VOLUME ~ .,data = dados_treino_rf,method ="anova")# 3. Gerar o Gráfico da Árvore# A função rpart.plot cria uma visualização muito mais informativa e bonitarpart.plot( arvore_decisao,type =4, # Estilo do gráfico (existem vários)extra =101, # Adiciona informações extras nos nósbox.palette ="BuGn", # Paleta de cores para os "nós"branch.lty =3, # Estilo da linha dos "galhos"shadow.col ="gray", # Cor da sombra das caixasmain ="Previsão de Volume")