Atualmente, estou trabalhando com o Python e o Scikit para fins de classificação e, lendo o GridSearch, achei que essa era uma ótima maneira de otimizar meus parâmetros do estimador para obter os melhores resultados.
Minha metodologia é esta:
- Dividir meus dados em treinamento / teste.
- Use o GridSearch com a validação 5Fold Cross para treinar e testar meus estimadores (floresta aleatória, aumento de gradiente, SVC entre outros) para obter os melhores estimadores com a combinação ideal de hiper parâmetros.
- Em seguida, calculo métricas em cada um dos meus estimadores, como Precisão, Rechamada, FMeasure e Coeficiente de Correlação de Matthews, usando meu conjunto de testes para prever as classificações e compará-las com os rótulos reais das classes.
É nesta fase que vejo comportamentos estranhos e não tenho certeza de como proceder. Pego o .best_estimator_ do GridSearch e o uso como o resultado 'ideal' da pesquisa na grade e realizo previsões usando esse estimador? Se fizer isso, acho que as métricas do estágio 3 são geralmente muito menores do que se eu simplesmente treinasse em todos os dados de treinamento e testasse no conjunto de testes. Ou simplesmente tomo o objeto GridSearchCV de saída como o novo estimador ? Se fizer isso, obtenho melhores pontuações nas métricas do estágio 3, mas parece estranho usar um objeto GridSearchCV em vez do classificador pretendido (por exemplo, uma floresta aleatória) ...
Edição: Então, minha pergunta é qual é a diferença entre o objeto GridSearchCV retornado e o atributo .best_estimator_? Qual delas devo usar para calcular outras métricas? Posso usar esta saída como um classificador comum (por exemplo, usando o Forecast) ou como devo usá-la?
fonte
refit=False
,clf.fit
não será feito com o melhor classificador?O GridSearchCV permite combinar um estimador com um preâmbulo de pesquisa em grade para ajustar os hiper-parâmetros. O método seleciona o parâmetro ideal na pesquisa em grade e o utiliza com o estimador selecionado pelo usuário. O GridSearchCV herda os métodos do classificador; portanto, você pode usar os métodos .score, .predict, etc. diretamente através da interface GridSearchCV. Se você deseja extrair os melhores hiperparâmetros identificados pela pesquisa em grade, pode usar .best_params_ e isso retornará o melhor hiperparâmetro. Você pode passar esse hiperparâmetro para seu estimador separadamente.
Usar .predict diretamente produzirá os mesmos resultados que obter o melhor hiperparâmetro através de .best_param_ e depois usá-lo em seu modelo. Ao entender o funcionamento sublinhado da pesquisa em grade, podemos ver por que esse é o caso.
Pesquisa em grade
Essa técnica é usada para encontrar os parâmetros ideais para usar com um algoritmo. NÃO são os pesos ou o modelo, são aprendidos usando os dados. Isso é obviamente bastante confuso, então vou distinguir entre esses parâmetros, chamando um hiperparâmetros.
Hiper-parâmetros são como k em k-vizinhos mais próximos (k-NN). O k-NN exige que o usuário selecione qual vizinho considerar ao calcular a distância. O algoritmo então ajusta um parâmetro, um limite, para ver se um exemplo novo se enquadra na distribuição aprendida, isso é feito com os dados.
Como escolhemos k?
Algumas pessoas simplesmente seguem recomendações baseadas em estudos anteriores do tipo de dados. Outros usam a pesquisa em grade. Esse método poderá determinar melhor qual k é o ideal para usar nos seus dados.
Como funciona?
Primeiro você precisa construir uma grade. Esse é essencialmente um conjunto de valores possíveis que seu hiperparâmetro pode assumir. Para o nosso caso, podemos usar . Em seguida, você treinará seu modelo k-NN para cada valor na grade. Primeiro você faria 1-NN, depois 2-NN, e assim por diante. Para cada iteração, você obterá uma pontuação de desempenho que informará o desempenho do seu algoritmo usando esse valor para o hiperparâmetro. Depois de percorrer toda a grade, você selecionará o valor que deu o melhor desempenho.[ 1 , 2 , 3 , . . . , 10 ]
Isso vai contra os princípios de não usar dados de teste !!
Você estaria absolutamente certo. Essa é a razão pela qual a pesquisa na grade geralmente é misturada à validação cruzada. Assim, mantemos os dados do teste completamente separados até estarmos realmente satisfeitos com nossos resultados e prontos para o teste. validação cruzada vezes pega um conjunto de treinamento e o separa em partes. Em seguida, treina nas dobras e testa na dobra que foi deixada de fora. Para cada valor na grade, o algoritmo será treinado novamente vezes, deixando cada dobra de fora. Em seguida, é calculada a média do desempenho em cada dobra e esse é o desempenho alcançado para esse valor de hiperparâmetro.n n - 1 nn n n−1 n
O valor do hiperparâmetro selecionado é aquele que atinge o desempenho médio mais alto nas dobras em n. Quando estiver satisfeito com seu algoritmo, você poderá testá-lo no conjunto de testes. Se você for direto para o conjunto de testes, estará arriscando se adaptar demais.
fonte