Closed AdrianArnaiz closed 5 years ago
Debemos realizar Nested cross-validation. Esto es debido a que si realizamos el ajuste de parámetros con todos los datos, estamos haciendo 'trampas' ya que hemos visto los datos. Se explica de manera detallada aquí: https://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html
_(Fuente imagen: https://scikit-learn.org/stable/tutorial/statistical_inference/model_selection.html#grid-search-and-cross-validated-estimators)_
Al arreglar eso, perdemos el acceso a los mejores parámetros y a los datos internos como splits_test_score del objeto gridSearch. Por lo tanto, acarrea más cambios en la clase y en los experimentos ya que nuestro experimenter.py se basaba en la devolución de un diccionario con los atributos que contenía experimenter.py y a partir de ahí visualizábamos, listábamos, etc.
También se debe repetir el análisis y la documentación de los resultados, ya que estos cambian para la mayoría de experimentos.
Se ha añadido la normalización al pipeline en vez de hacerla en todo el conjunto de datos X.
Añadimos al pipe o le creamos. Explicado en notebooks y clase:
if normalizar:
if isinstance(pipe, Pipeline):
pipe.steps.insert(0,['norm',MinMaxScaler()])
else:
pipe = Pipeline([('norm', MinMaxScaler()), ('clf', pipe)])
if isinstance(pg, list):
#para pasarle a dict: algunos paramgrids les definimos como [dict(params)]
pg=pg[0]
for k in pg:
pg['clf__'+k]=pg.pop(k)`
Detectado Fallo en Experimenter.py
Fallo: FIT del GRIDSEARCH con TODO EL CONJUNTO DE DATOS. Se establecen los mejores parametros con los todos los datos: ya están vistos. Solución: Hacer crossvalidation para la selección de parámetros. Arreglo: