diff --git a/scripts/ce089-09.R b/scripts/ce089-09.R index 4bac78ddabf1477475acf9dff955c3d983cc14d2..e4d11efc91ef374ed4b7c4932133d5c21a9ab953 100644 --- a/scripts/ce089-09.R +++ b/scripts/ce089-09.R @@ -156,3 +156,66 @@ xyplot(acc ~ tx_acer, }) #----------------------------------------------------------------------- + +# Situação: Para fazer um regressor por ensemble são usados `n_regr` +# regressores independentes (base/weak/lazy learners) que tem +# desvio-padrão do erro individual de predição `pr_err`. Qual é o erro +# quadrático médio de predição do ensemble de regressores considerando +# como valor predito a média aritmética das previsões dos regressores? +# Fazer a curva de erro quadrático médio do ensemble em função do erro +# de predição individual e do número de regressores base do ensamble, ou +# seja, determinar `err(n_regr, pr_err)`. + +simul <- function(n_regr = 3, pr_err = 1, N = 1000) { + #' @param n_regr (integer[1] > 3) é o número de regressores do + #' ensemble. + #' @param pr_err (0 < double[1]) é o desvio-padrão do erro de + #' predição individual de cada regressor independente do + #' ensamble. + #' @param N (integer[1] > 1) é o número de simulações Monte Carlo. + #' @return (double[1]) o erro quadrático médio de predição do + #' regressor ensemble. + u <- replicate(N, { + # Valor correto. + y <- runif(n = 1, min = -5, max = 5) + # Valor predito por cada regressor. + x <- rnorm(n = n_regr, + mean = y, + sd = pr_err) + # Valor predito pela coleção de regressores. + z <- mean(x) + (z - y)^2 + }) + # Determina o erro quadrático médio. + mean(u) +} + +# Grid de valores nos parâmetros da simulação. +grid <- expand.grid(n_regr = c(3, 5, 9, 13, 19, 25), + pr_err = seq(0.1, 10, by = 0.2)) +nrow(grid) + +# Obtenção da acurácia do ensemble em cada ponto de suporte. +grid$err <- with(grid, + mapply(FUN = simul, + n_regr, + pr_err, + MoreArgs = list(N = 2000))) + +# Visualização das curvas. +xyplot(err ~ pr_err, + groups = n_regr, + data = grid, + xlab = "Desvio-padrão do erro de predição do base learner", + ylab = "Erro quadrático médio de predição do ensemble", + auto.key = list(corner = c(0.05, 0.95), + title = "#Regress.", + cex.title = 1), + grid = TRUE, + type = "p") + + glayer({ + panel.curve(x^2/group.value, from = 0, + lty = 2, col = col.line) + }) + +#-----------------------------------------------------------------------