Modele ayuda usando Scikit-learn cuando use GridSearch

Como parte del proyecto de Enron, construyó el modelo adjunto, a continuación se muestra el resumen de los pasos,

A continuación el modelo da puntuaciones altamente perfectas

cv = StratifiedShuffleSplit(n_splits = 100, test_size = 0.2, random_state = 42) gcv = GridSearchCV(pipe, clf_params,cv=cv) gcv.fit(features,labels) ---> with the full dataset for train_ind, test_ind in cv.split(features,labels): x_train, x_test = features[train_ind], features[test_ind] y_train, y_test = labels[train_ind],labels[test_ind] gcv.best_estimator_.predict(x_test) 

A continuación el modelo da puntuaciones más razonables pero bajas.

 cv = StratifiedShuffleSplit(n_splits = 100, test_size = 0.2, random_state = 42) gcv = GridSearchCV(pipe, clf_params,cv=cv) gcv.fit(features,labels) ---> with the full dataset for train_ind, test_ind in cv.split(features,labels): x_train, x_test = features[train_ind], features[test_ind] y_train, y_test = labels[train_ind],labels[test_ind] gcv.best_estimator_.fit(x_train,y_train) gcv.best_estimator_.predict(x_test) 
  1. Usé Kbest para averiguar las puntuaciones y ordenó las funciones y probó una combinación de puntuaciones más altas y más bajas.

  2. SVM utilizado con un GridSearch utilizando un StratifiedShuffle

  3. Se utilizó best_estimator_ para predecir y calcular la precisión y la recuperación.

El problema es que el estimador es escupir puntajes perfectos, en algún caso 1

Pero cuando vuelvo a colocar el mejor clasificador en los datos de entrenamiento y luego ejecuto la prueba, se obtienen puntuaciones razonables.

Mi duda / pregunta era qué hace exactamente GridSearch con los datos de prueba después de la división utilizando el objeto Shuffle split que le enviamos. Supuse que no cabría nada en los datos de la prueba, si eso fuera cierto, entonces cuando predigo que usaré los mismos datos de la prueba, no debería dar este puntaje alto. ya que usé el valor random_state, shufflesplit debería haber creado la misma copia para el ajuste Grid y también para la predicción.

Entonces, ¿está mal usar el mismo Shufflesplit para dos?

Básicamente la búsqueda de la cuadrícula:

  • Prueba cada combinación de tu cuadrícula de parámetros
  • Para cada uno de ellos hará una validación cruzada de K-fold.
  • Seleccione el mejor disponible.

Entonces tu segundo caso es el bueno. De lo contrario, en realidad está prediciendo los datos con los que entrenó (lo cual no es el caso en la segunda opción, allí solo guarda los mejores parámetros de su búsqueda de grids)

GridSearchCV como @Gauthier Feuillen dijo se usa para buscar los mejores parámetros de un estimador para datos dados. Descripción de GridSearchCV: –

  1. gcv = GridSearchCV(pipe, clf_params,cv=cv)
  2. gcv.fit(features,labels)
  3. clf_params se expandirá para obtener todas las combinaciones posibles por separado usando ParameterGrid .
  4. features ahora se dividirán en features_train y features_test usando cv . Igual para las labels
  5. Ahora, el estimador de gridSearch (tubería) se entrenará utilizando features_train y labels_inner y se calificará con features_test y labels_test .
  6. Para cada posible combinación de parámetros en el paso 3, los pasos 4 y 5 se repetirán para cv_iterations . Se calculará el promedio de puntuación entre las iteraciones de CV, que se asignará a esa combinación de parámetros. Se puede acceder a este mediante el atributo cv_results_ de gridSearch.
  7. Para los parámetros que den la mejor puntuación, el estimador interno se reinicializará utilizando esos parámetros y se reajustará para todos los datos suministrados (características y tags).

Debido al último paso, está obteniendo puntuaciones diferentes en el primer y segundo enfoque . Porque en el primer enfoque, todos los datos se usan para entrenamiento y usted predice solo para esos datos. El segundo enfoque tiene predicción sobre datos que no se habían visto anteriormente.