Validação cruzada leave-one-out em python (com exemplos)
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 Leave-One-Out Cross-Validation (LOOCV) , que usa a seguinte abordagem:
1. Divida um conjunto de dados em um conjunto de treinamento e um conjunto de teste, usando todas as observações, exceto uma, como parte do conjunto de treinamento.
2. Crie um modelo usando apenas dados do conjunto de treinamento.
3. Use o modelo para prever o valor de resposta da observação excluída do modelo e calcular o erro quadrático médio (MSE).
4. Repita este processo n vezes. Calcule o MSE de teste como a média de todos os MSEs de teste.
Este tutorial fornece um exemplo passo a passo de como executar LOOCV 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 LeaveOneOut
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 a validação cruzada Leave-One-Out
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 = LeaveOneOut()
#build multiple linear regression model
model = LinearRegression()
#use LOOCV 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.1461548083469726
Pelo resultado, podemos perceber que o erro absoluto médio (MAE) foi de 3,146 . Ou seja, o erro absoluto médio entre a previsão do modelo e os dados efetivamente observados é 3,146.
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 = LeaveOneOut()
#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)))
3.619456476385567
A partir do resultado, podemos ver que a raiz do erro quadrático médio (RMSE) foi de 3,619 . 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.
Recursos adicionais
Uma rápida introdução à validação cruzada Leave-One-Out (LOOCV)
Um guia completo para regressão linear em Python