From 07097b8ae3c6a5bc431d225677874bfc52b86ca4 Mon Sep 17 00:00:00 2001
From: Walmes Zeviani <walmes@ufpr.br>
Date: Thu, 1 Nov 2018 11:22:01 -0300
Subject: [PATCH] =?UTF-8?q?Adiciona=20exemplo=20de=20regress=C3=A3o=20com?=
 =?UTF-8?q?=20ensembles.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 scripts/ce089-09.R | 63 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/scripts/ce089-09.R b/scripts/ce089-09.R
index 4bac78d..e4d11ef 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)
+    })
+
+#-----------------------------------------------------------------------
-- 
GitLab