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

Add a Comment

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