Validação cruzada k-fold em python (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.
Este tutorial fornece um exemplo passo a passo de como realizar a validação cruzada k-fold para um determinado modelo em Python.
Etapa 1: carregue as bibliotecas necessárias
Primeiro, carregaremos as funções e bibliotecas necessárias para este exemplo:
from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd
Etapa 2: crie os dados
A seguir, criaremos um DataFrame do pandas que contém duas variáveis preditoras, x1 e x2 , e uma única variável de resposta y.
df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})
Etapa 3: realizar validação cruzada K-Fold
A seguir, ajustaremos um modelo de regressão linear múltipla ao conjunto de dados e realizaremos LOOCV para avaliar o desempenho do modelo.
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use k-fold CV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
cv=cv, n_jobs=-1)
#view mean absolute error
mean(absolute(scores))
3.6141267491803646
Pelo resultado, podemos perceber que o erro absoluto médio (MAE) foi de 3,614 . Ou seja, o erro absoluto médio entre a previsão do modelo e os dados efetivamente observados é 3,614.
Em geral, quanto menor o MAE, melhor o modelo é capaz de prever as observações reais.
Outra métrica comumente usada para avaliar o desempenho do modelo é a raiz do erro quadrático médio (RMSE). O código a seguir mostra como calcular essa métrica usando LOOCV:
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
cv=cv, n_jobs=-1)
#view RMSE
sqrt(mean(absolute(scores)))
4.284373111711816
A partir do resultado, podemos ver que a raiz do erro quadrático médio (RMSE) foi 4,284 .
Quanto menor o RMSE, melhor o modelo é capaz de prever as observações reais.
Na prática, normalmente ajustamos vários modelos diferentes e comparamos o RMSE ou MAE de cada modelo para decidir qual modelo produz as taxas de erro de teste mais baixas e é, portanto, o melhor modelo a ser usado.
Observe também 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 este é o número ideal de camadas que produz taxas de erro de teste confiáveis.
Você pode encontrar a documentação completa da função KFold() do sklearn aqui .
Recursos adicionais
Uma introdução à validação cruzada K-Fold
Um guia completo para regressão linear em Python
Validação cruzada Leave-One-Out em Python