Começa tutorial de CV usando o caret.

parent 448abfcf
Pipeline #18006 failed with stages
in 18 seconds
---
title: "Validação cruzada com o pacote `caret`"
author: Prof. Walmes M. Zeviani & Prof. Eduardo V. Ferreira
date: 2018-08-24
#bibliography: ../config/Refs.bib
#csl: ../config/ABNT-UFPR-2011-Mendeley.csl
---
```{r, include = FALSE}
source("../config/setup.R")
opts_chunk$set(
cache = FALSE,
message = FALSE,
warning = FALSE)
```
```{r}
#-----------------------------------------------------------------------
# Inspeção do pacote `caret`.
# install.packages("caret",
# dependencies = TRUE,
# repos = "http://cran-r.c3sl.ufpr.br/")
library(caret)
packageVersion("caret")
grep(ls("package:caret"), pattern = "^train", value = TRUE)
args(trainControl)
```
```{r, eval = FALSE}
#-----------------------------------------------------------------------
# Formas de fazer validação cruzada.
help(trainControl, h = "html")
# method:
# "cv": Validação cruzada k-fold.
# "repeatedcv": idem ao anterior mas com repetições independentes.
# "LOOCV": leave-one-out CV.
# "none": não faz divisão treino/teste.
# Outros: "boot", "boot632", "optimism_boot", "boot_all", "timeslice",
# "adaptive_cv", "adaptive_boot" e "adaptive_LGOCV".
# repeats:
# (inteiro >= 1) Número de repetições para o caso de usar "repeatedcv".
# number:
# (inteiro >= 1) Número de folds para CV ou reamonstragens para bootstrap.
# p:
# (0 < p < 1): proporção dos dados usado para treino. O resto é
# validação.
``**
# Validação cruzada *k*-fold
```{r}
str(swiss)
# Criando os folds por fora.
# help(createFolds, help_type = "html")
apropos("^create[A-Z]")
cv_folds <- createFolds(swiss$Infant.Mortality, k = 5, list = TRUE)
str(cv_folds)
# Validação cruzada 5-fold (aqui é refeito).
control_list <- trainControl(method = "cv",
number = 5,
verboseIter = TRUE,
returnResamp = "all",
savePredictions = "all",
search = "grid")
names(control_list)
# Faz o processo de ajuste.
fit <- train(Infant.Mortality ~ .,
data = swiss,
method = "knn",
preProcess = c("center", "scale"),
trControl = control_list)
# Resultado do ajuste.
fit
# Conteúdo e classe do objeto.
names(fit)
class(fit)
methods(class = "train")
# Resultados agregados de performance para tunning.
fit$results
# Extração dos resultados em cada fold.
res <- fit$pred
res$d_squared <- (res$obs - res$pred)^2
res <- aggregate(cbind(mse = d_squared) ~ k + Resample,
data = res,
FUN = mean)
res$rmse <- sqrt(res$mse)
xyplot(rmse ~ k, groups = Resample, data = res, type = c("p", "a"))
# O mesmo que `fit$results`.
aggregate(rmse ~ k, data = res, FUN = mean)
# fit$trainingData
# fit$modelInfo
# fit$modelType
# Índices das observações usadas para treino e teste.
# fit$control
sapply(fit$control$index, FUN = length)
sapply(fit$control$indexOut, FUN = length)
# Resultado do modelo aplicado.
summary(fit)
summary(fit$finalModel)
# Gráficos.
histogram(fit,
panel = function(x, ...) {
panel.histogram(x, ...)
panel.rug(x)
})
plot(fit) # Valores agragados.
xyplot(fit) # Individual por fold.
# Importância relativa das variáveis.
varImp(fit)
# Medida de ajuste com todos os dados no melhor valor de hiperparâmetro.
RMSE(predict(fit), fit$trainingData$.outcome)
#-----------------------------------------------------------------------
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment