Validación cruzada K-fold
Vas a trabajar con un problema de clasificación binaria sobre una submuestra de una competición de Kaggle playground. El objetivo es predecir si el famoso jugador de baloncesto Kobe Bryant anotó o falló un tiro concreto.
Los datos de entrenamiento están disponibles en tu espacio de trabajo como el DataFrame bryant_shots. Contiene información de 10.000 tiros con sus propiedades y una variable target "shot\_made\_flag", que indica si el tiro entró o no.
Una de las características del conjunto de datos es "game_id", el partido concreto en el que se realizó el tiro. Hay 541 partidos distintos. Así que estás ante una característica categórica de alta cardinalidad. ¡Vamos a codificarla usando la media del target!
Supón que usas validación cruzada de 5 folds y quieres evaluar una característica codificada por media del target en la validación local.
Este ejercicio forma parte del curso
Cómo ganar una competición de Kaggle con Python
Instrucciones del ejercicio
- Para lograrlo, tienes que repetir el procedimiento de codificación para la característica categórica
"game_id"dentro de cada partición del fold por separado. Tu objetivo es especificar todos los parámetros que faltan en la llamada amean_target_encoding()dentro de cada partición del fold. - Recuerda que los parámetros
trainytestesperan los DataFrames de entrenamiento y de prueba. - Mientras que los parámetros
targetycategoricalesperan los nombres de la variable objetivo y de la característica categórica que se va a codificar.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Create 5-fold cross-validation
kf = KFold(n_splits=5, random_state=123, shuffle=True)
# For each folds split
for train_index, test_index in kf.split(bryant_shots):
cv_train, cv_test = bryant_shots.iloc[train_index], bryant_shots.iloc[test_index]
# Create mean target encoded feature
cv_train['game_id_enc'], cv_test['game_id_enc'] = mean_target_encoding(train=cv_train,
test=____,
target='shot_made_flag',
categorical='____',
alpha=5)
# Look at the encoding
print(cv_train[['game_id', 'shot_made_flag', 'game_id_enc']].sample(n=1))