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
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:
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) 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.