Validação cruzada k-fold em r (passo a passo)


Para avaliar o desempenho de um modelo em um conjunto de dados, precisamos medir até que ponto as previsões feitas pelo modelo correspondem aos dados observados.

Um método comumente usado para fazer isso é conhecido como validação cruzada k-fold , que usa a seguinte abordagem:

1. Divida aleatoriamente um conjunto de dados em k grupos, ou “dobras”, de tamanho aproximadamente igual.

2. Escolha uma das dobras como conjunto de contenção. Ajuste o modelo às dobras k-1 restantes. Calcule o teste MSE nas observações da camada que foi tensionada.

3. Repita esse processo k vezes, cada vez usando um conjunto diferente como conjunto de exclusão.

4. Calcule o MSE geral do teste como a média dos k MSEs do teste.

A maneira mais fácil de realizar a validação cruzada k-fold em R é usar a função trainControl() da biblioteca caret em R.

Este tutorial fornece um exemplo rápido de como usar esta função para realizar validação cruzada k-fold para um determinado modelo em R.

Exemplo: validação cruzada K-Fold em R

Suponha que temos o seguinte conjunto de dados em R:

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

O código a seguir mostra como ajustar um modelo de regressão linear múltipla a este conjunto de dados em R e realizar validação cruzada k-fold com k = 5 vezes para avaliar o desempenho do modelo:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5)

#fit a regression model and use k-fold CV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of k-fold CV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.018979 1 2.882348

Tuning parameter 'intercept' was held constant at a value of TRUE

Veja como interpretar o resultado:

  • Nenhum pré-processamento ocorreu. Ou seja, não dimensionamos os dados de forma alguma antes de ajustar os modelos.
  • O método de reamostragem que usamos para avaliar o modelo foi a validação cruzada de 5 vezes.
  • O tamanho da amostra para cada conjunto de treinamento foi 8.
  • RMSE: raiz do erro quadrático médio. Isso mede a diferença média entre as previsões feitas pelo modelo e as observações reais. Quanto menor o RMSE, mais precisamente um modelo pode prever as observações reais.
  • Rquadrado: Esta é uma medida da correlação entre as previsões feitas pelo modelo e as observações reais. Quanto maior o R ao quadrado, mais precisamente um modelo pode prever as observações reais.
  • MAE: O erro absoluto médio. Esta é a diferença média absoluta entre as previsões feitas pelo modelo e as observações reais. Quanto menor o MAE, mais precisamente um modelo pode prever as observações reais.

Cada uma das três medidas fornecidas no resultado (RMSE, R-quadrado e MAE) nos dá uma ideia do desempenho do modelo em dados não publicados.

Na prática, normalmente ajustamos vários modelos diferentes e comparamos as três métricas fornecidas pelos resultados aqui apresentados para decidir qual modelo produz as taxas de erro de teste mais baixas e é, portanto, o melhor modelo a ser usado.

Podemos usar o seguinte código para examinar o ajuste final do modelo:

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

O modelo final acabou sendo:

y = 21,2672 + 0,7803*(x 1 ) – 1,12538(x 2 )

Podemos usar o código a seguir para exibir as previsões do modelo feitas para cada dobra:

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

Observe que neste exemplo optamos por usar k=5 dobras, mas você pode escolher qualquer número de dobras que desejar. Na prática, normalmente escolhemos entre 5 e 10 camadas, pois esse é o número ideal de camadas que produz taxas de erro de teste confiáveis.

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *