Conteúdo do Curso
Classification with Python
5. Comparando Modelos
Classification with Python
Divisã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.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/traintestset.gif)
Isso pode ser alcançado utilizando a função train_test_split()
do sklearn
.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/TrainTestFunc.png)
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.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/cross.png)
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.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/CrossValFunc.png)
Aqui está um exemplo de utilização:
A pontuação utilizada por padrão para classificação é precisão:
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/Accuracy.png)
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.
Escolha todas as afirmações corretas.
Selecione algumas respostas corretas
Tudo estava claro?
Conteúdo do Curso
Classification with Python
5. Comparando Modelos
Classification with Python
Divisã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.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/traintestset.gif)
Isso pode ser alcançado utilizando a função train_test_split()
do sklearn
.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/TrainTestFunc.png)
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.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/cross.png)
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.
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/CrossValFunc.png)
Aqui está um exemplo de utilização:
A pontuação utilizada por padrão para classificação é precisão:
![](https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/Accuracy.png)
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.
Escolha todas as afirmações corretas.
Selecione algumas respostas corretas
Tudo estava claro?