Saltar al contenido

Cómo implementar SMOTE en validación cruzada y GridSearchCV

Solución:

Necesita mirar el objeto de canalización. imbalanced-learn tiene un Pipeline que extiende el Pipeline de scikit-learn, para adaptarse a los métodos fit_sample () y sample () además de los métodos fit_predict (), fit_transform () y predict () de scikit-learn.

Eche un vistazo a este ejemplo aquí:

  • https://imbalanced-learn.org/stable/auto_examples/pipeline/plot_pipeline_classification.html

Para su código, querrá hacer esto:

from imblearn.pipeline import make_pipeline, Pipeline

smote_enn = SMOTEENN(smote = sm)
clf_rf = RandomForestClassifier(n_estimators=25, random_state=1)

pipeline = make_pipeline(smote_enn, clf_rf)
    OR
pipeline = Pipeline([('smote_enn', smote_enn),
                     ('clf_rf', clf_rf)])

Entonces puedes pasar esto pipeline objeto a GridSearchCV, RandomizedSearchCV u otras herramientas de validación cruzada en scikit-learn como un objeto regular.

kf = StratifiedKFold(n_splits=n_splits)
random_search = RandomizedSearchCV(pipeline, param_distributions=param_dist,
                                   n_iter=1000, 
                                   cv = kf)

Esto parece que encajaría en el proyecto de ley http://contrib.scikit-learn.org/imbalanced-learn/stable/generated/imblearn.over_sampling.SMOTE.html

Querrás crear el tuyo propio transformer (http://scikit-learn.org/stable/modules/generated/sklearn.base.TransformerMixin.html) que al llamar fit devuelve un conjunto de datos equilibrado (presumiblemente el obtenido de StratifiedKFold), pero al llamar predict, que es lo que sucederá con los datos de prueba, llama a SMOTE.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *