ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
Para lidar com este problema, utilizamos métodos de reamostragem ( resampling methods ).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
Para lidar com este problema, utilizamos métodos de reamostragem ( resampling methods ).
Esses métodos podem ser classificados em: Cross-Validation e Bootstrap.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
Para lidar com este problema, utilizamos métodos de reamostragem ( resampling methods ).
Esses métodos podem ser classificados em: Cross-Validation e Bootstrap.
Entre as técnicas de Cross-Validation, temos:
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
O desempenho obtido com os dados de teste, fornece uma estimativa do desempenho que o modelo terá em um novo dataset
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
O desempenho obtido com os dados de teste, fornece uma estimativa do desempenho que o modelo terá em um novo dataset
Isto é feito facilmente utilizando as funções initial_split()
, training()
and testing()
do pacote rsample
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
O desempenho obtido com os dados de teste, fornece uma estimativa do desempenho que o modelo terá em um novo dataset
Isto é feito facilmente utilizando as funções initial_split()
, training()
and testing()
do pacote rsample
Exemplo:
library(rsample)split_data <- initial_split(data = full_dataset, prop = 3/4, strata = variavel_y)train_data <- training(split_data)test_data <- testing(split_data)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Case:
O conjunto de dados credit_data
do pacote modeldata
contém 4454 informações sobre clientes de um determinado banco, incluindo a variável Status
que nos diz se o cliente é um bom (good) ou mau (bad) pagador.
Fazer um modelo preditivo que nos ajude a classificar se um novo cliente será um bom ou mau pagador.
Qual é a performance estimada (taxa de observações corretamente classificadas) do modelo quando tivermos um dataset com novas observações?
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Case:
O conjunto de dados credit_data
do pacote modeldata
contém 4454 informações sobre clientes de um determinado banco, incluindo a variável Status
que nos diz se o cliente é um bom (good) ou mau (bad) pagador.
Fazer um modelo preditivo que nos ajude a classificar se um novo cliente será um bom ou mau pagador.
Qual é a performance estimada (taxa de observações corretamente classificadas) do modelo quando tivermos um dataset com novas observações?
library(dplyr)library(rsample)data("credit_data", package = "modeldata")credit_data <- credit_data %>% na.omit()split_data <- initial_split(data = credit_data, prop = 3/4, strata = Status)train_data <- training(split_data)test_data <- testing(split_data)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
library(tidymodels)library(kknn)model_spec <- nearest_neighbor(neighbors = 5) %>% set_engine("kknn") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.7556874
library(tidymodels)model_spec <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.8041543
library(tidymodels)library(discrim)model_spec <- discrim_linear() %>% set_engine("MASS") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.7942631
library(tidymodels)library(discrim)model_spec <- discrim_quad() %>% set_engine("MASS") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.760633
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O valor estimado da performance do modelo (neste caso, a taxa de observações corretamente classificadas) pode variar muito dependendo de qusis observações estão no treinamento e quais no teste.
Se tivermos poucas observações, utilizaremos muito poucas observações para treinar o modelo (ou seja, o modelo aprenderá com um subconjunto menor de observações) o que pode subestimar o desempenho estimado do modelo (taxa de observações corretamente classificadas).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O valor estimado da performance do modelo (neste caso, a taxa de observações corretamente classificadas) pode variar muito dependendo de qusis observações estão no treinamento e quais no teste.
Se tivermos poucas observações, utilizaremos muito poucas observações para treinar o modelo (ou seja, o modelo aprenderá com um subconjunto menor de observações) o que pode subestimar o desempenho estimado do modelo (taxa de observações corretamente classificadas).
Uma alternativa a este método é o Leave-One-Out Cross-Validation.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das n-vezes.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das n-vezes.
CV(n)=1nn∑i=1Medida de Performancei
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das n-vezes.
CV(n)=1nn∑i=1Medida de Performancei
loo_cv()
do pacote rsample
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Voltando ao case do dataset credit_data
do pacote modeldata
.
Por enquanto, não existe uma forma direta (se alguém souber, eu agradeço) de fazer isto com tidymodels
mas podemos utilizar um for
e resolver o problema de forma fácil.
n = nrow(credit_data)salvar_performance = c()model_spec <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") for (i in 1:n){ model_fit <- model_spec %>% fit(Status ~ ., data = credit_data[-i,]) yhat <- predict(model_fit, new_data = credit_data[i,]) salvar_performance[i] = accuracy_vec(yhat$.pred_class, credit_data$Status[i])}mean(salvar_performance)# 0.808616
O grande problema do método Leave-One-Out é que demora MUITO.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
Dividimos o dataset em k-grupos (folds) do mesmo tamanho.
Ajustamos (treinamos) o modelo k-vezes. Em cada vez, escolhemos um grupo para ser utilizado como dados de teste, e treinamos o modelo com os restantes k−1 grupos.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
Dividimos o dataset em k-grupos (folds) do mesmo tamanho.
Ajustamos (treinamos) o modelo k-vezes. Em cada vez, escolhemos um grupo para ser utilizado como dados de teste, e treinamos o modelo com os restantes k−1 grupos.
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das k-vezes.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
Dividimos o dataset em k-grupos (folds) do mesmo tamanho.
Ajustamos (treinamos) o modelo k-vezes. Em cada vez, escolhemos um grupo para ser utilizado como dados de teste, e treinamos o modelo com os restantes k−1 grupos.
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das k-vezes.
CV(k)=1kk∑i=1Medida de Performancei
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
k-fold Cross-Validation é feito utilizando as funções vfold_cv()
, fit_resamples
entre outras do pacote tidymodels
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
k-fold Cross-Validation é feito utilizando as funções vfold_cv()
, fit_resamples
entre outras do pacote tidymodels
library(tidymodels) folds <- vfold_cv(credit_data, v = 10)folds
## # 10-fold cross-validation ## # A tibble: 10 × 2## splits id ## <list> <chr> ## 1 <split [3635/404]> Fold01## 2 <split [3635/404]> Fold02## 3 <split [3635/404]> Fold03## 4 <split [3635/404]> Fold04## 5 <split [3635/404]> Fold05## 6 <split [3635/404]> Fold06## 7 <split [3635/404]> Fold07## 8 <split [3635/404]> Fold08## 9 <split [3635/404]> Fold09## 10 <split [3636/403]> Fold10
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
library(tidymodels)library(kknn)folds <- vfold_cv(credit_data, v = 10)model_spec <- nearest_neighbor(neighbors = 5) %>% set_engine("kknn") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.754 10 0.00522 Preprocessor1_Model1## 2 roc_auc binary 0.734 10 0.00921 Preprocessor1_Model1
library(tidymodels)folds <- vfold_cv(credit_data, v = 10)model_spec <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.809 10 0.00659 Preprocessor1_Model1## 2 roc_auc binary 0.833 10 0.00796 Preprocessor1_Model1
library(tidymodels)library(discrim)folds <- vfold_cv(credit_data, v = 10)model_spec <- discrim_linear() %>% set_engine("MASS") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.803 10 0.00855 Preprocessor1_Model1## 2 roc_auc binary 0.829 10 0.00871 Preprocessor1_Model1
library(tidymodels)library(discrim)folds <- vfold_cv(credit_data, v = 10)model_spec <- discrim_quad() %>% set_engine("MASS") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.759 10 0.00724 Preprocessor1_Model1## 2 roc_auc binary 0.774 10 0.0122 Preprocessor1_Model1
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
tidymodels
fornece muitas opções interessantes para machine/statistical learning, vale a pena estudar mais um pouco.ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
o | Tile View: Overview of Slides |
s | Toggle scribble toolbox |
Esc | Back to slideshow |
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
Para lidar com este problema, utilizamos métodos de reamostragem ( resampling methods ).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
Para lidar com este problema, utilizamos métodos de reamostragem ( resampling methods ).
Esses métodos podem ser classificados em: Cross-Validation e Bootstrap.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
No mundo ideal, gostaríamos treinar nosso modelo utilizando todo nosso conjunto de dados e avaliar sua performance com um novo dataset.
Na prática, não temos esse outro (novo) conjunto de dados e precisamos de algumas técnicas para estimar a performance do modelo antes de colocá-lo em produção.
Para lidar com este problema, utilizamos métodos de reamostragem ( resampling methods ).
Esses métodos podem ser classificados em: Cross-Validation e Bootstrap.
Entre as técnicas de Cross-Validation, temos:
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
O desempenho obtido com os dados de teste, fornece uma estimativa do desempenho que o modelo terá em um novo dataset
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
O desempenho obtido com os dados de teste, fornece uma estimativa do desempenho que o modelo terá em um novo dataset
Isto é feito facilmente utilizando as funções initial_split()
, training()
and testing()
do pacote rsample
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Dividimos aleatoriamente o conjunto de dados em dois parte: dados de treinamento e dados de validação (também chamados dados de teste).
Ajustamos (treinamos) o modelo utilizando os dados de treinamento e avaliamos seu desempenho nos dados de teste (que são dados que o modelo treinado não conhece)
O desempenho obtido com os dados de teste, fornece uma estimativa do desempenho que o modelo terá em um novo dataset
Isto é feito facilmente utilizando as funções initial_split()
, training()
and testing()
do pacote rsample
Exemplo:
library(rsample)split_data <- initial_split(data = full_dataset, prop = 3/4, strata = variavel_y)train_data <- training(split_data)test_data <- testing(split_data)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Case:
O conjunto de dados credit_data
do pacote modeldata
contém 4454 informações sobre clientes de um determinado banco, incluindo a variável Status
que nos diz se o cliente é um bom (good) ou mau (bad) pagador.
Fazer um modelo preditivo que nos ajude a classificar se um novo cliente será um bom ou mau pagador.
Qual é a performance estimada (taxa de observações corretamente classificadas) do modelo quando tivermos um dataset com novas observações?
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Case:
O conjunto de dados credit_data
do pacote modeldata
contém 4454 informações sobre clientes de um determinado banco, incluindo a variável Status
que nos diz se o cliente é um bom (good) ou mau (bad) pagador.
Fazer um modelo preditivo que nos ajude a classificar se um novo cliente será um bom ou mau pagador.
Qual é a performance estimada (taxa de observações corretamente classificadas) do modelo quando tivermos um dataset com novas observações?
library(dplyr)library(rsample)data("credit_data", package = "modeldata")credit_data <- credit_data %>% na.omit()split_data <- initial_split(data = credit_data, prop = 3/4, strata = Status)train_data <- training(split_data)test_data <- testing(split_data)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
library(tidymodels)library(kknn)model_spec <- nearest_neighbor(neighbors = 5) %>% set_engine("kknn") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.7556874
library(tidymodels)model_spec <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.8041543
library(tidymodels)library(discrim)model_spec <- discrim_linear() %>% set_engine("MASS") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.7942631
library(tidymodels)library(discrim)model_spec <- discrim_quad() %>% set_engine("MASS") %>% set_mode("classification") model_fit <- model_spec %>% fit(Status ~ ., data = train_data)yhat <- predict(model_fit, new_data = test_data)accuracy_vec(yhat$.pred_class, test_data$Status)
## [1] 0.760633
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O valor estimado da performance do modelo (neste caso, a taxa de observações corretamente classificadas) pode variar muito dependendo de qusis observações estão no treinamento e quais no teste.
Se tivermos poucas observações, utilizaremos muito poucas observações para treinar o modelo (ou seja, o modelo aprenderá com um subconjunto menor de observações) o que pode subestimar o desempenho estimado do modelo (taxa de observações corretamente classificadas).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O valor estimado da performance do modelo (neste caso, a taxa de observações corretamente classificadas) pode variar muito dependendo de qusis observações estão no treinamento e quais no teste.
Se tivermos poucas observações, utilizaremos muito poucas observações para treinar o modelo (ou seja, o modelo aprenderá com um subconjunto menor de observações) o que pode subestimar o desempenho estimado do modelo (taxa de observações corretamente classificadas).
Uma alternativa a este método é o Leave-One-Out Cross-Validation.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das n-vezes.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das n-vezes.
CV(n)=1nn∑i=1Medida de Performancei
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
O método é muito parecido com o anterior, mas tenta superar as fraquezas observadas pelo Validation Set Approach.
Dividimos o dataset em dois partes: treinamento (com n−1 observações) e teste (com apenas 1 observação).
O método é aplicado n-vezes (em cada vez, o modelo é treinado utilizando n−1 observações e avaliado utilizando uma única observação).
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das n-vezes.
CV(n)=1nn∑i=1Medida de Performancei
loo_cv()
do pacote rsample
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Voltando ao case do dataset credit_data
do pacote modeldata
.
Por enquanto, não existe uma forma direta (se alguém souber, eu agradeço) de fazer isto com tidymodels
mas podemos utilizar um for
e resolver o problema de forma fácil.
n = nrow(credit_data)salvar_performance = c()model_spec <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") for (i in 1:n){ model_fit <- model_spec %>% fit(Status ~ ., data = credit_data[-i,]) yhat <- predict(model_fit, new_data = credit_data[i,]) salvar_performance[i] = accuracy_vec(yhat$.pred_class, credit_data$Status[i])}mean(salvar_performance)# 0.808616
O grande problema do método Leave-One-Out é que demora MUITO.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
Dividimos o dataset em k-grupos (folds) do mesmo tamanho.
Ajustamos (treinamos) o modelo k-vezes. Em cada vez, escolhemos um grupo para ser utilizado como dados de teste, e treinamos o modelo com os restantes k−1 grupos.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
Dividimos o dataset em k-grupos (folds) do mesmo tamanho.
Ajustamos (treinamos) o modelo k-vezes. Em cada vez, escolhemos um grupo para ser utilizado como dados de teste, e treinamos o modelo com os restantes k−1 grupos.
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das k-vezes.
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
Nasce como uma alternativa ao Leave-One-Out Cross-Validation.
É computacionalmente menos caro.
É o método de validação cruzada mais utilizado
Dividimos o dataset em k-grupos (folds) do mesmo tamanho.
Ajustamos (treinamos) o modelo k-vezes. Em cada vez, escolhemos um grupo para ser utilizado como dados de teste, e treinamos o modelo com os restantes k−1 grupos.
A performance estimada do modelo é calculada como a média das performances obtidas em cada uma das k-vezes.
CV(k)=1kk∑i=1Medida de Performancei
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
k-fold Cross-Validation é feito utilizando as funções vfold_cv()
, fit_resamples
entre outras do pacote tidymodels
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
k-fold Cross-Validation é feito utilizando as funções vfold_cv()
, fit_resamples
entre outras do pacote tidymodels
library(tidymodels) folds <- vfold_cv(credit_data, v = 10)folds
## # 10-fold cross-validation ## # A tibble: 10 × 2## splits id ## <list> <chr> ## 1 <split [3635/404]> Fold01## 2 <split [3635/404]> Fold02## 3 <split [3635/404]> Fold03## 4 <split [3635/404]> Fold04## 5 <split [3635/404]> Fold05## 6 <split [3635/404]> Fold06## 7 <split [3635/404]> Fold07## 8 <split [3635/404]> Fold08## 9 <split [3635/404]> Fold09## 10 <split [3636/403]> Fold10
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
library(tidymodels)library(kknn)folds <- vfold_cv(credit_data, v = 10)model_spec <- nearest_neighbor(neighbors = 5) %>% set_engine("kknn") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.754 10 0.00522 Preprocessor1_Model1## 2 roc_auc binary 0.734 10 0.00921 Preprocessor1_Model1
library(tidymodels)folds <- vfold_cv(credit_data, v = 10)model_spec <- logistic_reg() %>% set_engine("glm") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.809 10 0.00659 Preprocessor1_Model1## 2 roc_auc binary 0.833 10 0.00796 Preprocessor1_Model1
library(tidymodels)library(discrim)folds <- vfold_cv(credit_data, v = 10)model_spec <- discrim_linear() %>% set_engine("MASS") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.803 10 0.00855 Preprocessor1_Model1## 2 roc_auc binary 0.829 10 0.00871 Preprocessor1_Model1
library(tidymodels)library(discrim)folds <- vfold_cv(credit_data, v = 10)model_spec <- discrim_quad() %>% set_engine("MASS") %>% set_mode("classification") model_wf <- workflow() %>% add_model(model_spec) %>% add_formula(Status ~ .)model_fit_rs <- model_wf %>% fit_resamples(folds)collect_metrics(model_fit_rs)
## # A tibble: 2 × 6## .metric .estimator mean n std_err .config ## <chr> <chr> <dbl> <int> <dbl> <chr> ## 1 accuracy binary 0.759 10 0.00724 Preprocessor1_Model1## 2 roc_auc binary 0.774 10 0.0122 Preprocessor1_Model1
ctruciosm.github.io — Carlos Trucíos (FACC/UFRJ)
tidymodels
fornece muitas opções interessantes para machine/statistical learning, vale a pena estudar mais um pouco.