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?