R: como usar o traincontrol para controlar os parâmetros de treinamento


Para avaliar até que ponto um modelo é capaz de se ajustar a um conjunto de dados, precisamos analisar o seu desempenho em observações nunca antes vistas.

Uma das maneiras mais comuns de conseguir isso é usar a 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 as funções trainControl() e train() da biblioteca caret em R.

A função trainControl() é usada para especificar os parâmetros de treinamento (por exemplo, tipo de validação cruzada a ser usada, número de dobras a serem usadas, etc.) e a função train() é usada para realmente ajustar o modelo aos dados. .

O exemplo a seguir mostra como usar as funções trainControl() e train() na prática.

Exemplo: como usar trainControl() 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

Agora suponha que usamos a função lm() para ajustar um modelo de regressão linear múltipla a este conjunto de dados, usando x1 e x2 como variáveis preditoras e y como variável de resposta:

 #fit multiple linear regression model to data
fit <- lm(y ~ x1 + x2, data=df)

#view model summary
summary(fit)

Call:
lm(formula = y ~ x1 + x2, data = df)

Residuals:
    Min 1Q Median 3Q Max 
-3.6650 -1.9228 -0.3684 1.2783 5.0208 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept) 21.2672 6.9927 3.041 0.0188 *
x1 0.7803 0.6942 1.124 0.2981  
x2 -1.1253 0.4251 -2.647 0.0331 *
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.093 on 7 degrees of freedom
Multiple R-squared: 0.801, Adjusted R-squared: 0.7441 
F-statistic: 14.09 on 2 and 7 DF, p-value: 0.003516

Usando os coeficientes na saída do modelo, podemos escrever o modelo de regressão ajustado:

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

Para ter uma ideia do desempenho deste modelo em observações invisíveis, podemos usar a validação cruzada k-fold.

O código a seguir mostra como usar a função trainControl() do pacote circunflexo para especificar a validação cruzada k-fold ( method=”cv” ) que usa 5 dobras ( number=5 ).

Em seguida, passamos esta função trainControl() para a função train() para realmente realizar a validação cruzada k-fold:

 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.612302 1 3.232153

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

A partir do resultado podemos ver que o modelo foi ajustado 5 vezes usando um tamanho de amostra de 8 observações cada vez.

Cada vez, o modelo foi usado para prever os valores das 2 observações retidas e as seguintes métricas foram calculadas a cada vez:

  • 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.
  • 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.

A média dos valores RMSE e MAE dos cinco componentes é exibida no resultado:

  • REQM: 3,612302
  • MAE: 3.232153

Essas métricas nos dão uma ideia do desempenho do modelo em novos dados.

Na prática, normalmente ajustamos vários modelos diferentes e comparamos essas métricas para determinar qual modelo tem melhor desempenho em dados não vistos.

Por exemplo, poderíamos ajustar um modelo de regressão polinomial e realizar uma validação cruzada K-fold nele para ver como as métricas RMSE e MAE se comparam ao modelo de regressão linear múltipla.

Nota nº 1: 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 este é o número ideal de camadas que produz taxas de erro de teste confiáveis.

Nota #2 : A função trainControl() aceita muitos argumentos potenciais. Você pode encontrar a documentação completa para esta função aqui .

Recursos adicionais

Os tutoriais a seguir fornecem informações adicionais sobre modelos de treinamento:

Introdução à validação cruzada K-Fold
Introdução à validação cruzada Leave-One-Out
O que é overfitting no aprendizado de máquina?

Add a Comment

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