Menu iconMenu icon
Aprendizaje automático con Python

Capítulo 3: Preprocesamiento de Datos

3.5 División entre Conjunto de Entrenamiento y Prueba

¡Bienvenidos a la etapa final de nuestro viaje de preprocesamiento de datos - la División entre Conjunto de Entrenamiento y Prueba! Este es un paso importante en la preparación de nuestro conjunto de datos para el análisis de aprendizaje automático. En esta etapa, dividimos nuestro conjunto de datos en dos partes: un conjunto de entrenamiento y un conjunto de prueba. El conjunto de entrenamiento se utiliza para entrenar nuestro modelo de aprendizaje automático, y el conjunto de prueba se utiliza para evaluar el rendimiento del modelo. Este proceso es similar a un ensayo general antes de la actuación real.

Al dividir el conjunto de datos en dos partes, podemos entrenar nuestro modelo en una parte y probarlo en otra, asegurando que nuestro modelo sea preciso y generalizable. En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn, una biblioteca de aprendizaje automático de código abierto para Python. Proporcionaremos una guía paso a paso sobre cómo dividir su conjunto de datos en conjuntos de entrenamiento y prueba utilizando las funciones incorporadas de Scikit-learn, y también discutiremos las mejores prácticas para dividir sus datos. Así que comencemos en este paso crucial hacia la construcción de un modelo de aprendizaje automático exitoso.

En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn.

3.5.1 Realización de una División entre el Conjunto de Entrenamiento y Prueba

La división entre el conjunto de entrenamiento y prueba es una técnica esencial en el aprendizaje automático. Se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático dividiendo el conjunto de datos en dos partes: el conjunto de entrenamiento y el conjunto de prueba.

El conjunto de entrenamiento se utiliza para entrenar el modelo y es una parte crucial del proceso. Al utilizar el conjunto de entrenamiento, el algoritmo de aprendizaje puede aprender de los datos y mejorar el rendimiento del modelo. Por otro lado, el conjunto de prueba se utiliza para evaluar el rendimiento del modelo y medir qué tan bien puede generalizar a datos nuevos y no vistos.

Este es un paso importante en el proceso, ya que ayuda a asegurar que el modelo no esté sobreajustando los datos de entrenamiento. En resumen, la división entre el conjunto de entrenamiento y prueba es una técnica poderosa que se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático y es esencial para garantizar que el modelo sea preciso y robusto.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

# Perform a train-test split
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42)

print("X_train:")
print(X_train)
print("\nX_test:")
print(X_test)
print("\ny_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

X_train:

   A  B
0  1  10
1  2  20
2  3  30
3  4  40
4  5  50

X_test:

   A  B
5  6  60
6  7  70
7  8  80
8  9  90
9  10  100

y_train:

0 0 0 0 0

y_test:

1 1 1 1 1

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes.

En este ejemplo, hemos utilizado un tamaño de prueba del 0.2, lo que significa que el 20% de los datos se utilizará para el conjunto de pruebas y el 80% para el conjunto de entrenamiento. El parámetro random_state se utiliza para la reproducibilidad de los resultados.

3.5.2 Muestreo Estratificado

Cuando se divide un conjunto de datos en conjuntos de entrenamiento y pruebas, es crucial asegurarse de que ambos conjuntos representen con precisión la distribución original de las clases. Esto es especialmente importante cuando el conjunto de datos tiene un desequilibrio significativo de clases.

Para garantizar que se mantengan las proporciones de cada clase, podemos utilizar una técnica llamada muestreo estratificado. Este método implica utilizar la función train_test_split y proporcionar el parámetro stratify con la columna de características que contiene etiquetas de clase. La función luego divide el conjunto de datos de manera que se preserve la distribución original de clases tanto en los conjuntos de entrenamiento como en los de pruebas.

Al utilizar el muestreo estratificado, podemos asegurarnos de que nuestros modelos se entrenen y evalúen en una muestra representativa del conjunto de datos original. Esto puede ayudar a prevenir problemas como el sobreajuste a la clase mayoritaria o la subestimación de la importancia de las clases minoritarias.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba con muestreo estratificado utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable with imbalanced class distribution
y = [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

# Perform a train-test split with stratified sampling
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42, stratify=y)

print("y_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

y_train:

[0 0 0 0 0]

y_test:

[1 1 1]

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. El argumento stratify se establece en y, lo que asegura que los conjuntos de entrenamiento y pruebas tengan la misma distribución de clases que los datos originales. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes. La distribución de clases en los conjuntos de entrenamiento y pruebas es la misma que la distribución de clases de los datos originales.

En este ejemplo, a pesar del desequilibrio en la distribución de clases en y, las divisiones y_train y y_test tienen la misma proporción de muestras de clase 0 y clase 1 debido al muestreo estratificado.

Con esto, llegamos al final de nuestro viaje a través de la tierra del preprocesamiento de datos. A lo largo de este viaje, hemos aprendido varias técnicas como la limpieza de datos, la normalización y la transformación, que nos ayudarán a dar sentido a nuestros datos. En los próximos capítulos, aplicaremos estas técnicas para preparar nuestros datos para varios algoritmos de aprendizaje automático.

Exploraremos diferentes tipos de algoritmos como la regresión lineal, los árboles de decisión y las máquinas de vectores de soporte, y veremos cómo el preprocesamiento juega un papel crucial en el rendimiento de estos algoritmos. ¡Así que mantente atento para un emocionante viaje por delante!

3.5 División entre Conjunto de Entrenamiento y Prueba

¡Bienvenidos a la etapa final de nuestro viaje de preprocesamiento de datos - la División entre Conjunto de Entrenamiento y Prueba! Este es un paso importante en la preparación de nuestro conjunto de datos para el análisis de aprendizaje automático. En esta etapa, dividimos nuestro conjunto de datos en dos partes: un conjunto de entrenamiento y un conjunto de prueba. El conjunto de entrenamiento se utiliza para entrenar nuestro modelo de aprendizaje automático, y el conjunto de prueba se utiliza para evaluar el rendimiento del modelo. Este proceso es similar a un ensayo general antes de la actuación real.

Al dividir el conjunto de datos en dos partes, podemos entrenar nuestro modelo en una parte y probarlo en otra, asegurando que nuestro modelo sea preciso y generalizable. En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn, una biblioteca de aprendizaje automático de código abierto para Python. Proporcionaremos una guía paso a paso sobre cómo dividir su conjunto de datos en conjuntos de entrenamiento y prueba utilizando las funciones incorporadas de Scikit-learn, y también discutiremos las mejores prácticas para dividir sus datos. Así que comencemos en este paso crucial hacia la construcción de un modelo de aprendizaje automático exitoso.

En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn.

3.5.1 Realización de una División entre el Conjunto de Entrenamiento y Prueba

La división entre el conjunto de entrenamiento y prueba es una técnica esencial en el aprendizaje automático. Se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático dividiendo el conjunto de datos en dos partes: el conjunto de entrenamiento y el conjunto de prueba.

El conjunto de entrenamiento se utiliza para entrenar el modelo y es una parte crucial del proceso. Al utilizar el conjunto de entrenamiento, el algoritmo de aprendizaje puede aprender de los datos y mejorar el rendimiento del modelo. Por otro lado, el conjunto de prueba se utiliza para evaluar el rendimiento del modelo y medir qué tan bien puede generalizar a datos nuevos y no vistos.

Este es un paso importante en el proceso, ya que ayuda a asegurar que el modelo no esté sobreajustando los datos de entrenamiento. En resumen, la división entre el conjunto de entrenamiento y prueba es una técnica poderosa que se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático y es esencial para garantizar que el modelo sea preciso y robusto.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

# Perform a train-test split
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42)

print("X_train:")
print(X_train)
print("\nX_test:")
print(X_test)
print("\ny_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

X_train:

   A  B
0  1  10
1  2  20
2  3  30
3  4  40
4  5  50

X_test:

   A  B
5  6  60
6  7  70
7  8  80
8  9  90
9  10  100

y_train:

0 0 0 0 0

y_test:

1 1 1 1 1

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes.

En este ejemplo, hemos utilizado un tamaño de prueba del 0.2, lo que significa que el 20% de los datos se utilizará para el conjunto de pruebas y el 80% para el conjunto de entrenamiento. El parámetro random_state se utiliza para la reproducibilidad de los resultados.

3.5.2 Muestreo Estratificado

Cuando se divide un conjunto de datos en conjuntos de entrenamiento y pruebas, es crucial asegurarse de que ambos conjuntos representen con precisión la distribución original de las clases. Esto es especialmente importante cuando el conjunto de datos tiene un desequilibrio significativo de clases.

Para garantizar que se mantengan las proporciones de cada clase, podemos utilizar una técnica llamada muestreo estratificado. Este método implica utilizar la función train_test_split y proporcionar el parámetro stratify con la columna de características que contiene etiquetas de clase. La función luego divide el conjunto de datos de manera que se preserve la distribución original de clases tanto en los conjuntos de entrenamiento como en los de pruebas.

Al utilizar el muestreo estratificado, podemos asegurarnos de que nuestros modelos se entrenen y evalúen en una muestra representativa del conjunto de datos original. Esto puede ayudar a prevenir problemas como el sobreajuste a la clase mayoritaria o la subestimación de la importancia de las clases minoritarias.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba con muestreo estratificado utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable with imbalanced class distribution
y = [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

# Perform a train-test split with stratified sampling
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42, stratify=y)

print("y_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

y_train:

[0 0 0 0 0]

y_test:

[1 1 1]

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. El argumento stratify se establece en y, lo que asegura que los conjuntos de entrenamiento y pruebas tengan la misma distribución de clases que los datos originales. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes. La distribución de clases en los conjuntos de entrenamiento y pruebas es la misma que la distribución de clases de los datos originales.

En este ejemplo, a pesar del desequilibrio en la distribución de clases en y, las divisiones y_train y y_test tienen la misma proporción de muestras de clase 0 y clase 1 debido al muestreo estratificado.

Con esto, llegamos al final de nuestro viaje a través de la tierra del preprocesamiento de datos. A lo largo de este viaje, hemos aprendido varias técnicas como la limpieza de datos, la normalización y la transformación, que nos ayudarán a dar sentido a nuestros datos. En los próximos capítulos, aplicaremos estas técnicas para preparar nuestros datos para varios algoritmos de aprendizaje automático.

Exploraremos diferentes tipos de algoritmos como la regresión lineal, los árboles de decisión y las máquinas de vectores de soporte, y veremos cómo el preprocesamiento juega un papel crucial en el rendimiento de estos algoritmos. ¡Así que mantente atento para un emocionante viaje por delante!

3.5 División entre Conjunto de Entrenamiento y Prueba

¡Bienvenidos a la etapa final de nuestro viaje de preprocesamiento de datos - la División entre Conjunto de Entrenamiento y Prueba! Este es un paso importante en la preparación de nuestro conjunto de datos para el análisis de aprendizaje automático. En esta etapa, dividimos nuestro conjunto de datos en dos partes: un conjunto de entrenamiento y un conjunto de prueba. El conjunto de entrenamiento se utiliza para entrenar nuestro modelo de aprendizaje automático, y el conjunto de prueba se utiliza para evaluar el rendimiento del modelo. Este proceso es similar a un ensayo general antes de la actuación real.

Al dividir el conjunto de datos en dos partes, podemos entrenar nuestro modelo en una parte y probarlo en otra, asegurando que nuestro modelo sea preciso y generalizable. En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn, una biblioteca de aprendizaje automático de código abierto para Python. Proporcionaremos una guía paso a paso sobre cómo dividir su conjunto de datos en conjuntos de entrenamiento y prueba utilizando las funciones incorporadas de Scikit-learn, y también discutiremos las mejores prácticas para dividir sus datos. Así que comencemos en este paso crucial hacia la construcción de un modelo de aprendizaje automático exitoso.

En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn.

3.5.1 Realización de una División entre el Conjunto de Entrenamiento y Prueba

La división entre el conjunto de entrenamiento y prueba es una técnica esencial en el aprendizaje automático. Se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático dividiendo el conjunto de datos en dos partes: el conjunto de entrenamiento y el conjunto de prueba.

El conjunto de entrenamiento se utiliza para entrenar el modelo y es una parte crucial del proceso. Al utilizar el conjunto de entrenamiento, el algoritmo de aprendizaje puede aprender de los datos y mejorar el rendimiento del modelo. Por otro lado, el conjunto de prueba se utiliza para evaluar el rendimiento del modelo y medir qué tan bien puede generalizar a datos nuevos y no vistos.

Este es un paso importante en el proceso, ya que ayuda a asegurar que el modelo no esté sobreajustando los datos de entrenamiento. En resumen, la división entre el conjunto de entrenamiento y prueba es una técnica poderosa que se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático y es esencial para garantizar que el modelo sea preciso y robusto.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

# Perform a train-test split
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42)

print("X_train:")
print(X_train)
print("\nX_test:")
print(X_test)
print("\ny_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

X_train:

   A  B
0  1  10
1  2  20
2  3  30
3  4  40
4  5  50

X_test:

   A  B
5  6  60
6  7  70
7  8  80
8  9  90
9  10  100

y_train:

0 0 0 0 0

y_test:

1 1 1 1 1

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes.

En este ejemplo, hemos utilizado un tamaño de prueba del 0.2, lo que significa que el 20% de los datos se utilizará para el conjunto de pruebas y el 80% para el conjunto de entrenamiento. El parámetro random_state se utiliza para la reproducibilidad de los resultados.

3.5.2 Muestreo Estratificado

Cuando se divide un conjunto de datos en conjuntos de entrenamiento y pruebas, es crucial asegurarse de que ambos conjuntos representen con precisión la distribución original de las clases. Esto es especialmente importante cuando el conjunto de datos tiene un desequilibrio significativo de clases.

Para garantizar que se mantengan las proporciones de cada clase, podemos utilizar una técnica llamada muestreo estratificado. Este método implica utilizar la función train_test_split y proporcionar el parámetro stratify con la columna de características que contiene etiquetas de clase. La función luego divide el conjunto de datos de manera que se preserve la distribución original de clases tanto en los conjuntos de entrenamiento como en los de pruebas.

Al utilizar el muestreo estratificado, podemos asegurarnos de que nuestros modelos se entrenen y evalúen en una muestra representativa del conjunto de datos original. Esto puede ayudar a prevenir problemas como el sobreajuste a la clase mayoritaria o la subestimación de la importancia de las clases minoritarias.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba con muestreo estratificado utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable with imbalanced class distribution
y = [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

# Perform a train-test split with stratified sampling
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42, stratify=y)

print("y_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

y_train:

[0 0 0 0 0]

y_test:

[1 1 1]

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. El argumento stratify se establece en y, lo que asegura que los conjuntos de entrenamiento y pruebas tengan la misma distribución de clases que los datos originales. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes. La distribución de clases en los conjuntos de entrenamiento y pruebas es la misma que la distribución de clases de los datos originales.

En este ejemplo, a pesar del desequilibrio en la distribución de clases en y, las divisiones y_train y y_test tienen la misma proporción de muestras de clase 0 y clase 1 debido al muestreo estratificado.

Con esto, llegamos al final de nuestro viaje a través de la tierra del preprocesamiento de datos. A lo largo de este viaje, hemos aprendido varias técnicas como la limpieza de datos, la normalización y la transformación, que nos ayudarán a dar sentido a nuestros datos. En los próximos capítulos, aplicaremos estas técnicas para preparar nuestros datos para varios algoritmos de aprendizaje automático.

Exploraremos diferentes tipos de algoritmos como la regresión lineal, los árboles de decisión y las máquinas de vectores de soporte, y veremos cómo el preprocesamiento juega un papel crucial en el rendimiento de estos algoritmos. ¡Así que mantente atento para un emocionante viaje por delante!

3.5 División entre Conjunto de Entrenamiento y Prueba

¡Bienvenidos a la etapa final de nuestro viaje de preprocesamiento de datos - la División entre Conjunto de Entrenamiento y Prueba! Este es un paso importante en la preparación de nuestro conjunto de datos para el análisis de aprendizaje automático. En esta etapa, dividimos nuestro conjunto de datos en dos partes: un conjunto de entrenamiento y un conjunto de prueba. El conjunto de entrenamiento se utiliza para entrenar nuestro modelo de aprendizaje automático, y el conjunto de prueba se utiliza para evaluar el rendimiento del modelo. Este proceso es similar a un ensayo general antes de la actuación real.

Al dividir el conjunto de datos en dos partes, podemos entrenar nuestro modelo en una parte y probarlo en otra, asegurando que nuestro modelo sea preciso y generalizable. En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn, una biblioteca de aprendizaje automático de código abierto para Python. Proporcionaremos una guía paso a paso sobre cómo dividir su conjunto de datos en conjuntos de entrenamiento y prueba utilizando las funciones incorporadas de Scikit-learn, y también discutiremos las mejores prácticas para dividir sus datos. Así que comencemos en este paso crucial hacia la construcción de un modelo de aprendizaje automático exitoso.

En esta sección, exploraremos cómo realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn.

3.5.1 Realización de una División entre el Conjunto de Entrenamiento y Prueba

La división entre el conjunto de entrenamiento y prueba es una técnica esencial en el aprendizaje automático. Se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático dividiendo el conjunto de datos en dos partes: el conjunto de entrenamiento y el conjunto de prueba.

El conjunto de entrenamiento se utiliza para entrenar el modelo y es una parte crucial del proceso. Al utilizar el conjunto de entrenamiento, el algoritmo de aprendizaje puede aprender de los datos y mejorar el rendimiento del modelo. Por otro lado, el conjunto de prueba se utiliza para evaluar el rendimiento del modelo y medir qué tan bien puede generalizar a datos nuevos y no vistos.

Este es un paso importante en el proceso, ya que ayuda a asegurar que el modelo no esté sobreajustando los datos de entrenamiento. En resumen, la división entre el conjunto de entrenamiento y prueba es una técnica poderosa que se utiliza para evaluar el rendimiento de un algoritmo de aprendizaje automático y es esencial para garantizar que el modelo sea preciso y robusto.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

# Perform a train-test split
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42)

print("X_train:")
print(X_train)
print("\nX_test:")
print(X_test)
print("\ny_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

X_train:

   A  B
0  1  10
1  2  20
2  3  30
3  4  40
4  5  50

X_test:

   A  B
5  6  60
6  7  70
7  8  80
8  9  90
9  10  100

y_train:

0 0 0 0 0

y_test:

1 1 1 1 1

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes.

En este ejemplo, hemos utilizado un tamaño de prueba del 0.2, lo que significa que el 20% de los datos se utilizará para el conjunto de pruebas y el 80% para el conjunto de entrenamiento. El parámetro random_state se utiliza para la reproducibilidad de los resultados.

3.5.2 Muestreo Estratificado

Cuando se divide un conjunto de datos en conjuntos de entrenamiento y pruebas, es crucial asegurarse de que ambos conjuntos representen con precisión la distribución original de las clases. Esto es especialmente importante cuando el conjunto de datos tiene un desequilibrio significativo de clases.

Para garantizar que se mantengan las proporciones de cada clase, podemos utilizar una técnica llamada muestreo estratificado. Este método implica utilizar la función train_test_split y proporcionar el parámetro stratify con la columna de características que contiene etiquetas de clase. La función luego divide el conjunto de datos de manera que se preserve la distribución original de clases tanto en los conjuntos de entrenamiento como en los de pruebas.

Al utilizar el muestreo estratificado, podemos asegurarnos de que nuestros modelos se entrenen y evalúen en una muestra representativa del conjunto de datos original. Esto puede ayudar a prevenir problemas como el sobreajuste a la clase mayoritaria o la subestimación de la importancia de las clases minoritarias.

Ejemplo:

Así es como podemos realizar una división entre el conjunto de entrenamiento y prueba con muestreo estratificado utilizando Scikit-learn:

import pandas as pd
from sklearn.model_selection import train_test_split

# Create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
})

# Create a target variable with imbalanced class distribution
y = [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

# Perform a train-test split with stratified sampling
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state=42, stratify=y)

print("y_train:")
print(y_train)
print("\ny_test:")
print(y_test)

Salida:

y_train:

[0 0 0 0 0]

y_test:

[1 1 1]

El código primero importa el módulo sklearn.model_selection como train_test_split. Luego, crea un DataFrame llamado df con las columnas A y B y los valores [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] respectivamente. A continuación, crea una variable objetivo y con los valores [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]. Luego, realiza una división entre el conjunto de entrenamiento y prueba utilizando la función train_test_split. El argumento test_size se establece en 0.2, lo que significa que el 20% de los datos se utilizará para las pruebas y el 80% de los datos se utilizará para el entrenamiento. El argumento random_state se establece en 42, lo que garantiza que la misma división se utilizará cada vez que se ejecute el código. El argumento stratify se establece en y, lo que asegura que los conjuntos de entrenamiento y pruebas tengan la misma distribución de clases que los datos originales. Luego, el código imprime los conjuntos de entrenamiento y pruebas.

La salida muestra que el conjunto de entrenamiento contiene el 80% de los datos y el conjunto de pruebas contiene el 20% de los datos. La variable objetivo y se ha dividido en los conjuntos de entrenamiento y pruebas de la misma manera. Esto asegura que el modelo no se entrene en el conjunto de pruebas y que pueda evaluarse en datos que no ha visto antes. La distribución de clases en los conjuntos de entrenamiento y pruebas es la misma que la distribución de clases de los datos originales.

En este ejemplo, a pesar del desequilibrio en la distribución de clases en y, las divisiones y_train y y_test tienen la misma proporción de muestras de clase 0 y clase 1 debido al muestreo estratificado.

Con esto, llegamos al final de nuestro viaje a través de la tierra del preprocesamiento de datos. A lo largo de este viaje, hemos aprendido varias técnicas como la limpieza de datos, la normalización y la transformación, que nos ayudarán a dar sentido a nuestros datos. En los próximos capítulos, aplicaremos estas técnicas para preparar nuestros datos para varios algoritmos de aprendizaje automático.

Exploraremos diferentes tipos de algoritmos como la regresión lineal, los árboles de decisión y las máquinas de vectores de soporte, y veremos cómo el preprocesamiento juega un papel crucial en el rendimiento de estos algoritmos. ¡Así que mantente atento para un emocionante viaje por delante!