Validação Cruzada
No capítulo anterior, exploramos a abordagem de divisão entre treino e teste para avaliar o modelo. Essa abordagem possui algumas desvantagens:
- Utilizamos apenas uma parte do conjunto de dados para o treinamento: naturalmente, quanto mais dados fornecemos ao modelo, mais ele pode aprender e melhor será seu desempenho;
- O resultado pode depender fortemente da divisão: como visto no capítulo anterior, já que o conjunto de dados é dividido aleatoriamente, executar o código várias vezes pode gerar resultados consideravelmente diferentes.
Por isso, existe uma abordagem diferente para avaliar um modelo, conhecida como validação cruzada.
Primeiro, dividimos todo o conjunto de dados em 5 partes iguais, chamadas de folds.
Em seguida, utilizamos um fold como conjunto de teste e os outros folds como conjunto de treinamento.
Como sempre, utilizamos o conjunto de treino para treinar o modelo e o conjunto de teste para avaliá-lo.
Agora, repita o processo utilizando cada partição como conjunto de teste, uma de cada vez.
Como resultado, obtemos cinco escores de acurácia, um de cada divisão. Podemos então calcular a média desses escores para medir o desempenho médio do modelo.
Para calcular o escore de validação cruzada em Python, podemos utilizar a função cross_val_score()
do módulo sklearn.model_selection
.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Fornece resultados mais estáveis e confiáveis do que o método de divisão treino-teste; no entanto, é significativamente mais lento porque exige treinar e avaliar o modelo cinco vezes (ou n vezes se você definir n como o número de divisões), em comparação com apenas uma vez na divisão treino-teste.
A validação cruzada é normalmente utilizada em ajuste de hiperparâmetros, onde todo o processo de validação cruzada é executado para cada valor potencial de hiperparâmetro.
Por exemplo, ao determinar o número ideal de vizinhos em um algoritmo k-vizinhos mais próximos, você realizaria uma rodada completa de validação cruzada para cada valor candidato. Esse método garante uma avaliação completa de cada configuração de hiperparâmetro em todo o conjunto de dados, permitindo selecionar o valor que consistentemente apresenta o melhor desempenho.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.13
Validação Cruzada
Deslize para mostrar o menu
No capítulo anterior, exploramos a abordagem de divisão entre treino e teste para avaliar o modelo. Essa abordagem possui algumas desvantagens:
- Utilizamos apenas uma parte do conjunto de dados para o treinamento: naturalmente, quanto mais dados fornecemos ao modelo, mais ele pode aprender e melhor será seu desempenho;
- O resultado pode depender fortemente da divisão: como visto no capítulo anterior, já que o conjunto de dados é dividido aleatoriamente, executar o código várias vezes pode gerar resultados consideravelmente diferentes.
Por isso, existe uma abordagem diferente para avaliar um modelo, conhecida como validação cruzada.
Primeiro, dividimos todo o conjunto de dados em 5 partes iguais, chamadas de folds.
Em seguida, utilizamos um fold como conjunto de teste e os outros folds como conjunto de treinamento.
Como sempre, utilizamos o conjunto de treino para treinar o modelo e o conjunto de teste para avaliá-lo.
Agora, repita o processo utilizando cada partição como conjunto de teste, uma de cada vez.
Como resultado, obtemos cinco escores de acurácia, um de cada divisão. Podemos então calcular a média desses escores para medir o desempenho médio do modelo.
Para calcular o escore de validação cruzada em Python, podemos utilizar a função cross_val_score()
do módulo sklearn.model_selection
.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Fornece resultados mais estáveis e confiáveis do que o método de divisão treino-teste; no entanto, é significativamente mais lento porque exige treinar e avaliar o modelo cinco vezes (ou n vezes se você definir n como o número de divisões), em comparação com apenas uma vez na divisão treino-teste.
A validação cruzada é normalmente utilizada em ajuste de hiperparâmetros, onde todo o processo de validação cruzada é executado para cada valor potencial de hiperparâmetro.
Por exemplo, ao determinar o número ideal de vizinhos em um algoritmo k-vizinhos mais próximos, você realizaria uma rodada completa de validação cruzada para cada valor candidato. Esse método garante uma avaliação completa de cada configuração de hiperparâmetro em todo o conjunto de dados, permitindo selecionar o valor que consistentemente apresenta o melhor desempenho.
Obrigado pelo seu feedback!