Crear tuberías en Python

Jay Shaw 10 octubre 2023
  1. Crear una canalización en Python para un conjunto de datos personalizado
  2. Crear una canalización en Python para un conjunto de datos de Scikit-Learn
Crear tuberías en Python

Este artículo demostrará la creación de una canalización de Python para el aprendizaje automático de conjuntos de datos de sklearn y conjuntos de datos personalizados.

Crear una canalización en Python para un conjunto de datos personalizado

Necesitamos dos paquetes de importación para crear una canalización de Python, Pandas para generar marcos de datos y sklearn para canalizaciones. Junto con él, implementamos otros dos subpaquetes, Pipeline y Linear Regression.

A continuación se muestra la lista de todos los paquetes utilizados.

import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression

Formar un conjunto de datos con valores de una ecuación

Este programa tiene la intención de crear una canalización que predecirá los valores consiguientes de una ecuación cuando haya suficientes valores siguientes entrenando el modelo.

La ecuación utilizada aquí es:

c = a + 3*\sqrt[3]{b}

Creamos un dataset Pandas con los valores de la ecuación lineal.

df = pd.DataFrame(columns=["col1", "col2", "col3"], val=[[15, 8, 21], [16, 27, 25]])

Dividir datos en conjuntos de entrenamiento y prueba

Cada modelo de aprendizaje automático requiere dividir los datos en dos mitades desiguales. Después de separarlos, usamos estos dos conjuntos para entrenar y probar el modelo.

La parte más significativa se usa para entrenar y la otra se usa para probar el modelo.

En el siguiente fragmento de código, los primeros 8 valores se toman para entrenar el modelo y el resto para probarlo.

learn = df.iloc[:8]
evaluate = df.iloc[8:]

La canalización de scikit-learn funciona tomando valores en la canalización y luego entregando los resultados. Los valores se proporcionan a través de dos variables de entrada: X e y.

En la ecuación utilizada, c es una función de a y b. Entonces, para hacer que la tubería se ajuste a los valores en el modelo de regresión lineal, transferiremos los valores a, b a los valores X y c en y.

Es importante notar que X e y son variables de aprendizaje y evaluación. Entonces, transferimos las variables a y b a la función de tren y asignamos la variable c a la función de prueba.

learn_X = learn.drop("col3", axis=1)
learn_y = learn.col3

evaluate_X = evaluate.drop("col3", axis=1)
evaluate_y = evaluate.col3

En el código anterior, la función drop() de Pandas elimina los valores de la columna c cuando los valores se introducen en la variable learn_X. En la variable learn_y se transfieren los valores de la columna c.

axis = 1 representa la columna, mientras que un valor 0 representa las filas.

Cree una canalización de Python y ajuste los valores en ella

Creamos una tubería en Python usando la función Pipeline. Debemos guardarlo en una variable antes de usarlo.

Aquí, se declara una variable llamada rock para este propósito.

Dentro de la canalización, debemos dar su nombre y el modelo a utilizar - ('Modelo para Regresión Lineal', LinearRegression()).

rock = Pipeline(steps=[("Model for Linear Regression", LinearRegression())])

Una vez que se completan los pasos para crear la canalización en Python, debe ajustarse con los valores de aprendizaje para que el modelo lineal pueda entrenar la canalización con los valores proporcionados.

rock.fit(learn_X, learn_y)

Después de entrenar la canalización, la variable evaluate_X predice los siguientes valores a través de la función pipe1.predict().

Los valores pronosticados se almacenan en una nueva variable, evalve, y se imprimen.

evalve = rock.predict(evaluate_X)
print(f"\n{evalve}")

Pongamos todo junto para observar cómo se crea una canalización y su rendimiento.

import pandas as pd

# import warnings
# warnings.filterwarnings('ignore')

from sklearn.pipeline import Pipeline

from sklearn.linear_model import LinearRegression

df = pd.DataFrame(
    columns=["col1", "col2", "col3"],
    data=[
        [15, 8, 21],
        [16, 27, 25],
        [17, 64, 29],
        [18, 125, 33],
        [19, 216, 37],
        [20, 343, 41],
        [21, 512, 45],
        [22, 729, 49],
        [23, 1000, 53],
        [24, 1331, 57],
        [25, 1728, 61],
        [26, 2197, 65],
    ],
)

learn = df.iloc[:8]
evaluate = df.iloc[8:]

learn_X = learn.drop("col3", axis=1)
learn_y = learn.col3

evaluate_X = evaluate.drop("col3", axis=1)
evaluate_y = evaluate.col3

print("\n step: Here, the pipeline is formed")
rock = Pipeline(steps=[("Model for Linear Regression", LinearRegression())])
print("\n Step: Fitting the data inside")
rock.fit(learn_X, learn_y)
print("\n Searching for outcomes after evaluation")
evalve = rock.predict(evaluate_X)
print(f"\n{evalve}")

Producción :

"C:/Users/Win 10/pipe.py"

 step: Here, the pipeline is formed

 Step: Fitting the data inside

 Searching for outcomes after evaluation

[53. 57. 61. 65.]

Process finished with exit code 0

Como vemos, la canalización predice los valores exactos.

Crear una canalización en Python para un conjunto de datos de Scikit-Learn

Este ejemplo demuestra cómo crear una canalización en Python para un conjunto de datos de aprendizaje de Scikit. Realizar operaciones de canalización en grandes conjuntos de datos es un poco diferente de los pequeños.

La canalización necesita usar modelos adicionales para limpiar y filtrar los datos cuando se trata de grandes conjuntos de datos.

A continuación se muestran los paquetes de importación que necesitamos.

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn import datasets

Se utiliza un conjunto de datos de sklearn. Tiene varias columnas y valores, pero usaremos específicamente dos columnas: datos y objetivo.

Cargue y divida el conjunto de datos en conjuntos de entrenamiento y prueba

Cargaremos el conjunto de datos en la variable bc y almacenaremos los valores de las columnas individuales en las variables X e y.

bc = datasets.load_breast_cancer()
X = bc.data
y = bc.target

Una vez que se carga el conjunto de datos, definimos las variables de aprendizaje y evaluación. El conjunto de datos debe dividirse en conjuntos de entrenamiento y de prueba.

a_learn, a_evaluate, b_learn, b_evaluate = train_test_split(
    X, y, test_size=0.40, random_state=1, stratify=y
)

Asignamos el conjunto de datos en 4 variables principales: X_learn, X_evaluate, y_learn e y_evaluate. A diferencia del programa anterior, aquí la asignación se realiza a través de la función train_test_split().

test_size=0.4 indica a la función que reserve el 40 % del conjunto de datos para realizar pruebas, y la mitad restante se reserva para el entrenamiento.

random_state=1 asegura que la división del conjunto de datos se realice de manera uniforme para que la predicción proporcione el mismo resultado cada vez que se ejecuta la función. random_state=0 proporcionará un resultado diferente cada vez que se ejecute la función.

stratify=y asegura que se utilice el mismo tamaño de datos en el tamaño de la muestra, como se proporciona para estratificar los parámetros. Si hay un 15 % de 1 y un 85 % de 0, “estratificar” garantizará que el sistema tenga un 15 % de 1 y un 85 % de 0 en cada división aleatoria.

Cree una canalización de Python y ajuste los valores en ella

pipeline = make_pipeline(StandardScaler(),
RandomForestClassifier (n_estimators=10, max_features=5, max_depth=2, random_state=1))

Donde:

  • make_pipeline() es una función de Scikit-learn para crear tuberías.
  • Standard scaler() elimina los valores de una media y los distribuye hacia sus valores unitarios.
  • RandomForestClassifier() es un modelo de toma de decisiones que toma algunos valores de muestra del conjunto de datos, crea un árbol de decisión con cada valor de muestra y luego predice los resultados de cada árbol de decisión. Luego, el modelo votó los resultados pronosticados por su precisión, y el resultado con más votos se elige como la predicción final.
  • n_estimadores indican el número de árboles de decisión a crear antes de votar.
  • max_features decide cuántos estados aleatorios se formarán cuando se ejecute la división de un nodo.
  • max_depth indica qué tan profundo va el nodo del árbol.

Después de crear la canalización, se ajustan los valores y se predice el resultado.

pipeline.fit(a_learn, b_learn)
y_pred = pipeline.predict(a_evaluate)

Veamos el programa completo.

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline
from sklearn import datasets

bc = datasets.load_breast_cancer()
X = bc.data
y = bc.target

a_learn, a_evaluate, b_learn, b_evaluate = train_test_split(
    X, y, test_size=0.40, random_state=1, stratify=y
)

# Create the pipeline

pipeline = make_pipeline(
    StandardScaler(),
    RandomForestClassifier(
        n_estimators=10, max_features=5, max_depth=2, random_state=1
    ),
)


pipeline.fit(a_learn, b_learn)

y_pred = pipeline.predict(a_evaluate)

print(y_pred)

Producción :

"C:/Users/Win 10/test_cleaned.py"
[0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1
 1 1 0 1 1 1 1 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1
 1 1 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1
 1 1 0 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 1 1 1 0 1 1
 0 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1
 1 1 1 1 1 0]

Process finished with exit code 0