A Falha do GridSearchCV
Antes de explorar o GridSearchCV, é importante observar que o KNeighborsClassifier possui vários hiperparâmetros além de n_neighbors. Dois deles são: weights e p.
Pesos
O KNeighborsClassifier faz previsões encontrando os k vizinhos mais próximos e atribuindo a classe mais frequente entre eles, independentemente da proximidade de cada vizinho.
Uma alternativa é ponderar os vizinhos pela distância, dando mais influência aos pontos mais próximos. Isso é feito com weights='distance'.
Por padrão, o classificador utiliza weights='uniform', onde todos os vizinhos contribuem igualmente.
P
O hiperparâmetro p define como as distâncias são calculadas:
p=1: Distância de Manhattan (soma das diferenças absolutas entre as coordenadas);p=2: Distância Euclidiana (distância em linha reta, conhecida da geometria).
O parâmetro p pode assumir qualquer inteiro positivo. Existem muitas distâncias diferentes, mas elas são mais difíceis de visualizar do que p=1 ou p=2.
Não se preocupe se os detalhes de weights ou p não estiverem claros. Eles são apresentados apenas para mostrar que existe mais de um hiperparâmetro que pode influenciar as previsões do modelo. Considere-os como exemplos de hiperparâmetros que podem ser ajustados.
No capítulo anterior, o GridSearchCV foi utilizado para ajustar apenas o n_neighbors.
Para buscar a melhor combinação de n_neighbors, weights e p, o param_grid pode ser definido como:
param_grid = {
'n_neighbors': [1, 3, 5, 7],
'weights': ['distance', 'uniform'],
'p': [1, 2]
}
GridSearchCV testa todas as combinações possíveis para encontrar a melhor, então irá tentar todas estas:
Isso aumenta significativamente o espaço de busca. Por exemplo:
param_grid = {
'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
'weights': ['distance', 'uniform'],
'p': [1, 2, 3, 4, 5]
}
Com 100 combinações de hiperparâmetros e validação cruzada com 5 divisões, o modelo é treinado e avaliado 500 vezes.
Para conjuntos de dados pequenos, isso é viável, mas com conjuntos maiores e modelos mais complexos, o processo se torna muito lento.
Para lidar com esses casos, geralmente se prefere o RandomizedSearchCV. Ele explora apenas um subconjunto de todas as combinações possíveis, reduzindo significativamente o tempo de computação e ainda assim fornecendo bons resultados.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain how RandomizedSearchCV works compared to GridSearchCV?
What are some best practices for choosing hyperparameter ranges?
How do I interpret the results from GridSearchCV or RandomizedSearchCV?
Awesome!
Completion rate improved to 3.13
A Falha do GridSearchCV
Deslize para mostrar o menu
Antes de explorar o GridSearchCV, é importante observar que o KNeighborsClassifier possui vários hiperparâmetros além de n_neighbors. Dois deles são: weights e p.
Pesos
O KNeighborsClassifier faz previsões encontrando os k vizinhos mais próximos e atribuindo a classe mais frequente entre eles, independentemente da proximidade de cada vizinho.
Uma alternativa é ponderar os vizinhos pela distância, dando mais influência aos pontos mais próximos. Isso é feito com weights='distance'.
Por padrão, o classificador utiliza weights='uniform', onde todos os vizinhos contribuem igualmente.
P
O hiperparâmetro p define como as distâncias são calculadas:
p=1: Distância de Manhattan (soma das diferenças absolutas entre as coordenadas);p=2: Distância Euclidiana (distância em linha reta, conhecida da geometria).
O parâmetro p pode assumir qualquer inteiro positivo. Existem muitas distâncias diferentes, mas elas são mais difíceis de visualizar do que p=1 ou p=2.
Não se preocupe se os detalhes de weights ou p não estiverem claros. Eles são apresentados apenas para mostrar que existe mais de um hiperparâmetro que pode influenciar as previsões do modelo. Considere-os como exemplos de hiperparâmetros que podem ser ajustados.
No capítulo anterior, o GridSearchCV foi utilizado para ajustar apenas o n_neighbors.
Para buscar a melhor combinação de n_neighbors, weights e p, o param_grid pode ser definido como:
param_grid = {
'n_neighbors': [1, 3, 5, 7],
'weights': ['distance', 'uniform'],
'p': [1, 2]
}
GridSearchCV testa todas as combinações possíveis para encontrar a melhor, então irá tentar todas estas:
Isso aumenta significativamente o espaço de busca. Por exemplo:
param_grid = {
'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
'weights': ['distance', 'uniform'],
'p': [1, 2, 3, 4, 5]
}
Com 100 combinações de hiperparâmetros e validação cruzada com 5 divisões, o modelo é treinado e avaliado 500 vezes.
Para conjuntos de dados pequenos, isso é viável, mas com conjuntos maiores e modelos mais complexos, o processo se torna muito lento.
Para lidar com esses casos, geralmente se prefere o RandomizedSearchCV. Ele explora apenas um subconjunto de todas as combinações possíveis, reduzindo significativamente o tempo de computação e ainda assim fornecendo bons resultados.
Obrigado pelo seu feedback!