Ajuste de hiperparámetros usando GridSearchCV y KerasClassifier

El ajuste de hiperparámetros se realiza para aumentar la eficiencia de un modelo ajustando los parámetros de la red neuronal. Algunas API de scikit-learn como GridSearchCV y RandomizedSearchCV se utilizan para realizar ajustes de hiperparámetros. 

En este artículo, aprenderá a usar GridSearchCV para ajustar los hiperparámetros de Keras Neural Networks. 

Acercarse: 

  1. Envolveremos los modelos de Keras para usarlos en scikit-learn usando KerasClassifier, que es un envoltorio.
  2. Usaremos validación cruzada usando KerasClassifier y GridSearchCV
  3. Sintonice hiperparámetros como el número de épocas, el número de neuronas y el tamaño del lote.

Implementación de la API clasificadora scikit-learn para Keras:

tf.keras.wrappers.scikit_learn.KerasClassifier(

   build_fn=Ninguno, **sk_params

)

Código:

# import the libraries 
import tensorflow as tf
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler

El conjunto de datos se puede descargar desde aquí
. Importe el conjunto de datos con el que predeciremos si un cliente se queda o se va. 
 

Código:

# The last column is a binary value
dataset = pd.read_csv('Churn_Modelling.csv')
X = dataset.iloc[:, 3:-1].values
y = dataset.iloc[:, -1].values

Código: preprocesar los datos

le = LabelEncoder()
X[:, 2] = le.fit_transform(X[:, 2])
#perform one hot encoding 
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])], remainder='passthrough')
X = np.array(ct.fit_transform(X))
# perform standardization of the data. 
sc = StandardScaler()
X = sc.fit_transform(X)

Para usar el envoltorio KerasClassifier, necesitaremos construir nuestro modelo en una función que debe pasarse al argumento build_fn en el constructor KerasClassifier. 

Código:

def build_clf(unit):
  # creating the layers of the NN
  ann = tf.keras.models.Sequential()
  ann.add(tf.keras.layers.Dense(units=unit, activation='relu'))
  ann.add(tf.keras.layers.Dense(units=unit, activation='relu'))
  ann.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))
  ann.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
  return ann

Código: crea el objeto de la clase KerasClassifier

model=KerasClassifier(build_fn=build_clf)

Ahora crearemos el diccionario de los parámetros que queremos ajustar y pasar como argumento en GridSearchCV. 

Código:

params={'batch_size':[100, 20, 50, 25, 32], 
        'nb_epoch':[200, 100, 300, 400],
        'unit':[5,6, 10, 11, 12, 15],
           
        }
gs=GridSearchCV(estimator=model, param_grid=params, cv=10)
# now fit the dataset to the GridSearchCV object. 
gs = gs.fit(X, y)

El miembro best_score_ proporciona la mejor puntuación observada durante el procedimiento de optimización y best_params_ describe la combinación de parámetros que logró los mejores resultados.

Código:

best_params=gs.best_params_
accuracy=gs.best_score_

Producción:

Precisión: 0,80325

Mejores parámetros: {‘batch_size’: 20, ‘nb_epoch’: 200, ‘unit’: 15}

Publicación traducida automáticamente

Artículo escrito por maryamnadeem20 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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