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?
refit=False
,clf.fit
não será feito com o melhor classificador?