Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Divisão treino-teste. Validação cruzada | k-NN Classifier
course content

Conteúdo do Curso

Classification with Python

Divisão treino-teste. Validação cruzadaDivisão treino-teste. Validação cruzada

Nos capítulos anteriores, construímos os modelos e previmos novos valores. Mas não temos ideia de quão bem o modelo se comporta e se essas previsões são confiáveis.

Divisão entre treino e teste

Para medir o desempenho do modelo, precisamos de um subconjunto de dados rotulados que o modelo ainda não viu. Então, dividimos aleatoriamente todos os dados rotulados em conjunto de treinamento e conjunto de teste.

Isso pode ser alcançado utilizando a função train_test_split() do sklearn.

Geralmente, você divide o modelo em cerca de 70-90% para o conjunto de treinamento e 10-30% para o conjunto de teste. No entanto, dezenas de milhares de instâncias de teste são mais do que suficientes, portanto não há necessidade de usar sequer 10% se seu conjunto de dados for grande (milhões de instâncias). Agora podemos treinar o modelo usando o conjunto de treinamento e calcular sua precisão no conjunto de teste.

Mas esta abordagem possui algumas falhas:

  • Não utilizamos todos os dados disponíveis para o treinamento, o que poderia aprimorar nosso modelo.
  • Como avaliamos a precisão do modelo em uma pequena parte dos dados (conjunto de teste), essa pontuação de precisão pode ser pouco confiável em conjuntos de dados menores (você pode executar o código acima várias vezes e ver como a precisão muda cada vez que um novo conjunto de teste é amostrado).

Validação cruzada

A validação cruzada foi criada para combater esses problemas. Sua ideia consiste em embaralhar todo o conjunto, dividir em 5 partes iguais (folds), e realizar 5 iterações nas quais se utilizarão 4 partes para treinamento e 1 como conjunto de teste.

Então, treinamos cinco modelos com conjuntos de dados um pouco diferentes. Em cada um, calculamos a acurácia no conjunto de teste. Uma vez feito isso, podemos calcular a média desses 5 valores de acurácia, que será nossa pontuação de acurácia de validação cruzada. É mais confiável, já que calculamos a acurácia com base em todos os nossos dados, apenas utilizamos cinco iterações para isso. Agora sabemos o quão bem o modelo se desempenha e podemos retreinar o modelo utilizando o conjunto de dados completo.

Nota

Você pode utilizar um número de dobras diferente de cinco. Digamos algum número n. Então você usará uma dobra para o conjunto de teste e n-1 para o conjunto de treinamento. A seguinte função facilita a configuração dessas coisas.

Aqui está um exemplo de utilização:

A pontuação utilizada por padrão para classificação é precisão:

Portanto, apenas cerca de 75% das previsões estão corretas. Mas talvez com diferentes n_neighbors, a precisão será melhor? Será! O próximo capítulo aborda a escolha de n_neighbors (ou k) com a maior precisão de validação cruzada.

question-icon

Escolha todas as afirmações corretas.

Selecione algumas respostas corretas

Tudo estava claro?

Seção 1. Capítulo 6
course content

Conteúdo do Curso

Classification with Python

Divisão treino-teste. Validação cruzadaDivisão treino-teste. Validação cruzada

Nos capítulos anteriores, construímos os modelos e previmos novos valores. Mas não temos ideia de quão bem o modelo se comporta e se essas previsões são confiáveis.

Divisão entre treino e teste

Para medir o desempenho do modelo, precisamos de um subconjunto de dados rotulados que o modelo ainda não viu. Então, dividimos aleatoriamente todos os dados rotulados em conjunto de treinamento e conjunto de teste.

Isso pode ser alcançado utilizando a função train_test_split() do sklearn.

Geralmente, você divide o modelo em cerca de 70-90% para o conjunto de treinamento e 10-30% para o conjunto de teste. No entanto, dezenas de milhares de instâncias de teste são mais do que suficientes, portanto não há necessidade de usar sequer 10% se seu conjunto de dados for grande (milhões de instâncias). Agora podemos treinar o modelo usando o conjunto de treinamento e calcular sua precisão no conjunto de teste.

Mas esta abordagem possui algumas falhas:

  • Não utilizamos todos os dados disponíveis para o treinamento, o que poderia aprimorar nosso modelo.
  • Como avaliamos a precisão do modelo em uma pequena parte dos dados (conjunto de teste), essa pontuação de precisão pode ser pouco confiável em conjuntos de dados menores (você pode executar o código acima várias vezes e ver como a precisão muda cada vez que um novo conjunto de teste é amostrado).

Validação cruzada

A validação cruzada foi criada para combater esses problemas. Sua ideia consiste em embaralhar todo o conjunto, dividir em 5 partes iguais (folds), e realizar 5 iterações nas quais se utilizarão 4 partes para treinamento e 1 como conjunto de teste.

Então, treinamos cinco modelos com conjuntos de dados um pouco diferentes. Em cada um, calculamos a acurácia no conjunto de teste. Uma vez feito isso, podemos calcular a média desses 5 valores de acurácia, que será nossa pontuação de acurácia de validação cruzada. É mais confiável, já que calculamos a acurácia com base em todos os nossos dados, apenas utilizamos cinco iterações para isso. Agora sabemos o quão bem o modelo se desempenha e podemos retreinar o modelo utilizando o conjunto de dados completo.

Nota

Você pode utilizar um número de dobras diferente de cinco. Digamos algum número n. Então você usará uma dobra para o conjunto de teste e n-1 para o conjunto de treinamento. A seguinte função facilita a configuração dessas coisas.

Aqui está um exemplo de utilização:

A pontuação utilizada por padrão para classificação é precisão:

Portanto, apenas cerca de 75% das previsões estão corretas. Mas talvez com diferentes n_neighbors, a precisão será melhor? Será! O próximo capítulo aborda a escolha de n_neighbors (ou k) com a maior precisão de validação cruzada.

question-icon

Escolha todas as afirmações corretas.

Selecione algumas respostas corretas

Tudo estava claro?

Seção 1. Capítulo 6
some-alt