¿Sabes qué es el train_test_split? Si quieres conocerlo y aprender a usarlo, no te pierdas este post. A grandes rasgos, podemos decir que el train_test_split es una función incluida en la librería scikit.learn que sirve para dividir arreglos o matrices en subconjuntos aleatorios de train y test.
Su sintaxis completa es:
//train_test_split
sklearn.model_selection.train_test_split(*arrays, **options).
¿Qué es train_test_split?
La función train_test_split permite hacer una división de un conjunto de datos en dos bloques de entrenamiento y prueba de un modelo (train and test). Esta función está íntimamente relacionada con la estratificación, proceso que se hace con respecto a una variable, que normalmente es la variable target.
Si no le decimos al train_test_split que estratifique, esta función nos reserva un poco unas proporciones similares. Es decir, es lo suficientemente inteligente como para no hacer divisiones descabelladas, como un 90-10% (recordemos que el estándar ideal es 70-75% para train y 30-25% para test).
Para no confiar en que el algoritmo de esta función sea lo suficientemente inteligente, lo que se suele hacer es pasarle un parámetro, que es la estratificación, y le decimos qué queremos estratificar y con respecto a qué variable queremos hacerlo.
Entonces, la proporción que tenga la variable objetivo es la que vamos a tener tanto en train como en test.
Vamos a probar el train_test_split con un ejemplo
//train_test_split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split (x1, y1, test_size = 0.3, shuffle = True, random_state = 0)
knn = KNeighborsClassifier (n_neighbors = 1). fit (x_train, y_train)
plot_decision_boundary (X_test, y_test, 0.05, knn)
Lo primero que hacemos es decirle que importe la función. Lo que hay después de la función es el modo de usarla: X_train, X_test, y_train, y_test = train_test_split (x1, y1, test_size = 0.3, shuffle = True, random_state = 0)
Para saber qué nos falta, explicaremos cada uno de los componentes de estos comandos:
test_size y train_size
Vemos el test_size = 0.3, que corresponde a un 30%. Así como existe el test_size, también existe el train_size, pero uno anula al otro, es decir, no podríamos poner test_size = 0.3 y train_size = 0.3, porque uno de esos dos no va a respetar al otro.
Shuffle y random_state
El shuffle lo que hace es aleatorizar, mientras que el random_state lo que hace es conseguir cierta repetición en los resultados. Cada uno de los train_test que tengamos va a tener como semilla un random_state.
Con esta información, podrás notar que lo que nos falta estratificar. Con la estratificación, la línea de comandos quedaría así:
//train_test_split
X_train, X_test, y_train, y_test = train_test_split (x1, y1, test_size = 0.3, shuffle = True, random_state = 0, stratify = y1)
El orden de las variables que estamos declarando tienen un orden específico, es decir, el orden de los factores en este caso sí altera el resultado.
Entonces, ¿qué hacemos después? La línea siguiente ya va teniendo más pinta de un entrenamiento real con un modelo real: knn = KNeighborsClassifier (n_neighbors = 1). fit (x_train, y_train).
Como vemos, el código que requerimos para ejecutar este proceso de machine learning de lanzar un modelo y probar distintas cosas es casi nulo.
El resultado de esta función train_test_split es:
Esto es lo que hemos conseguido. Este es un resultado real, porque estos datos no los ha visto el modelo previamente. Si comparamos este resultado con otro realizado anteriormente, vamos a ver que es muy distinto.
Si observamos detenidamente, no hemos hecho nada distinto, solo hemos tenido el mismo modelo entrenado con todos los datos. En cambio, el último es el mismo modelo, con el mismo número de parámetros, entrenado solo con los datos de entrenamiento y probado solo con los datos de test.
Asimismo, este último parece ser un resultado «no real», ya que todo lo que está haciendo el modelo lo ha visto anteriormente. Esto quiere decir que no han ingresado datos nuevos.
Si te ha gustado esta temática y quieres aprender más, ¡tenemos la mejor opción para ti! Con la guía de nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp podrás aprender todo lo necesario para convertirte en un gran profesional en el sector IT. Se trata de una formación intensiva de 8 meses en la que tendrás la oportunidad de seguir tu proceso formativo acompañado de los mejores profesionales. ¡Anímate a transformar tu futuro y solicita más información ya!