División del dataset

Ahora, vamos a separar el dataset Iris en dos bloques: un primer bloque de entrenamiento y otro de validación. El objetivo es entrenar el modelo con los datos del primero y probarlo con los datos del segundo, asegurando de esta forma que lo validamos con datos desconocidos por el algoritmo. Es cierto que, de esta forma, no estamos entrenando el modelo a partir de todos los datos de los que disponemos, pero es la única forma de evaluar el verdadero comportamiento del modelo. De todos modos, veremos más adelante formas más sofisticadas de realizar esta validación.

Para realizar la división de los datos vamos a utilizar la función train_test_split ofrecida por Scikit-learn. Si a esta función le pasamos como argumento una estructura, nos devolverá dos (el mencionado bloque de entrenamiento y el de validación). Si le pasamos dos estructuras (por ejemplo, el DataFrame X conteniendo las características predictivas y la Serie y conteniendo las etiquetas), nos devolverá cuatro bloques (los resultantes de dividir los dos bloques que recibe como argumentos en otros dos cada uno).

Importemos, por lo tanto, la función y generemos los bloques de entrenamiento y validación:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify = y,
                                        random_state = 0)

Por defecto, el bloque de entrenamiento está recibiendo el 75% de las muestras, y el bloque de validación el 25% restante (esto es configurable).

Con el parámetro stratify le estamos pidiendo a la función que se asegure de que la distribución de los valores de la etiqueta y sea equivalente en los bloques generados (es decir, que el porcentaje de flores setosa, versicolor y virginica sea equivalente en los bloques de entrenamiento y de validación).