¿Hay una forma fácil de hacer una búsqueda en la cuadrícula sin validación cruzada en Python?

Hay una clase absolutamente útil GridSearchCV en scikit-learn para hacer la búsqueda de cuadrícula y la validación cruzada, pero no quiero hacer validación cruzada. Quiero hacer una búsqueda en cuadrícula sin validación cruzada y usar datos completos para entrenar. Para ser más específico, necesito evaluar mi modelo hecho por RandomForestClassifier con “puntaje Oob” durante la búsqueda en la cuadrícula. ¿Hay alguna manera fácil de hacerlo? o debo hacer una clase por mi cuenta?

Los puntos son

  • Me gustaría hacer la búsqueda de la red de manera fácil.
  • No quiero hacer validación cruzada.
  • Necesito usar datos completos para entrenar (no quiero separarme para entrenar datos y datos de prueba)
  • Necesito usar oob score para evaluar durante la búsqueda de cuadrícula.

Realmente recomendaría no usar OOB para evaluar un modelo, pero es útil saber cómo ejecutar una búsqueda de cuadrícula fuera de GridSearchCV() (con frecuencia hago esto para poder guardar las predicciones de CV de la mejor cuadrícula para facilitar el astackdo de modelos) . Creo que la forma más fácil es crear su cuadrícula de parámetros a través de ParameterGrid() y luego recorrer cada conjunto de parámetros. Por ejemplo, suponiendo que tiene un dict de cuadrícula, llamado “cuadrícula”, y un objeto modelo de RF, llamado “rf”, entonces puede hacer algo como esto:

 for g in ParameterGrid(grid): rf.set_params(**g) rf.fit(X,y) # save if best if rf.oob_score_ > best_score: best_score = rf.oob_score_ best_grid = g print "OOB: %0.5f" % best_score print "Grid:", best_grid 

Un método es usar ParameterGrid para hacer un iterador de los parámetros que desea y recorrer en bucle.

Otra cosa que podrías hacer es configurar el GridSearchCV para que haga lo que quieras. No recomendaría esto porque es innecesariamente complicado.
Lo que necesitas hacer es:

  • Usa el arg cv de los documentos y dale un generador que produzca una tupla con todos los índices (para que el entrenamiento y la prueba sean los mismos)
  • Cambie el argumento de scoring para usar el oob dado del bosque aleatorio.

Vea este enlace: https://stackoverflow.com/a/44682305/2202107

Usó cv=[(slice(None), slice(None))] que NO fue recomendado por los autores de sklearn.