Ejemplo con Iris

Aunque ha sido este método el que hemos implementado en las secciones dedicadas a los algoritmos de clasificación, aunque solo sea para poder comparar el resultado con el devuelto vía validación cruzada, probemos el método de retención con el dataset Iris. Cargamos los datos y codificamos la etiqueta:

iris = sns.load_dataset("Iris")
iris["label"] = iris.species.astype("category").cat.codes

Extremos las características predictivas y las etiquetas:

X = iris.drop(["species", "label"], axis = 1)
y = iris.label

Y vamos a probar la validación con Random Forest, de forma que lo importamos e instanciamos:

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()

Ahora, aplicamos la función train_test_split de Scikit-Learn para crear los datasets de entrenamiento y validación, dejando los tamaños de los bloques por defecto (lo que supone asignar el 75% de las muestras al primer bloque y 25% al segundo):

X_train, X_test, y_train, y_test = train_test_split(X, y, stratify = y, random_state = 0)

Con el parámetro stratify nos aseguramos de que los bloques generados van a contener un porcentaje semejante de, en este caso, los valores contenidos en y.

Por último, entrenamos el modelo con el dataset de entrenamiento y lo probamos en el dataset de validación:

model.fit(X_train, y_train)
model.score(X_test, y_test)
1.0

Puede verse cómo el resultado es anormalmente alto y, probablemente, no muestre el verdadero rendimiento del modelo.