Tuberías y Estimadores Compuestos

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En scikit-learn, se utilizan tuberías y estimadores compuestos para combinar múltiples transformadores y estimadores en un solo modelo. Esto es útil cuando existe una secuencia fija de pasos para procesar los datos, como la selección de características, la normalización y la clasificación. Las tuberías también se pueden utilizar para la selección conjunta de parámetros y para garantizar que las estadísticas de los datos de prueba no se filtran al modelo entrenado durante la validación cruzada.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos rápidamente el problema para usted.

Pipeline - Encadenamiento de Estimadores

La clase Pipeline en scikit-learn se utiliza para encadenar múltiples estimadores en uno solo. Esto le permite llamar a fit y predict una sola vez en sus datos para ajustar una secuencia completa de estimadores. También permite la selección conjunta de parámetros y ayuda a evitar la filtración de datos en la validación cruzada.

Para crear una tubería, debe proporcionar una lista de pares (clave, valor), donde la clave es una cadena para identificar cada paso y el valor es un objeto estimador. A continuación, se muestra un ejemplo de creación de una tubería con un transformador PCA y un clasificador SVM:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
pipe = Pipeline(estimators)

Puede acceder a los pasos de una tubería mediante indexación o por nombre:

pipe.steps[0]  ## acceso por índice
pipe[0]  ## equivalente al anterior
pipe['reduce_dim']  ## acceso por nombre

También puede usar la función make_pipeline como un atajo para la construcción de tuberías:

from sklearn.pipeline import make_pipeline
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import Binarizer

make_pipeline(Binarizer(), MultinomialNB())

Parámetros Anidados

Puede acceder a los parámetros de los estimadores en una tubería utilizando la sintaxis <estimador>__<parámetro>. Esto es útil para realizar búsquedas en cuadrícula sobre los parámetros de todos los estimadores en la tubería. Aquí hay un ejemplo:

pipe.set_params(clf__C=10)

Caché de Transformadores

Ajustar transformadores puede ser computacionalmente costoso. Para evitar la computación repetida, puede habilitar el caché de transformadores en una tubería utilizando el parámetro memory. Este parámetro se puede establecer en un directorio donde se almacenarán en caché los transformadores, o en un objeto joblib.Memory. Aquí hay un ejemplo:

from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from tempfile import mkdtemp
from shutil import rmtree

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
cachedir = mkdtemp()
pipe = Pipeline(estimators, memory=cachedir)

## Borre el directorio de caché cuando ya no sea necesario
rmtree(cachedir)

TransformedTargetRegressor

La clase TransformedTargetRegressor se utiliza para transformar la variable objetivo en un problema de regresión antes de ajustar un modelo de regresión. Esto es útil cuando desea aplicar una transformación a la variable objetivo, como tomar el logaritmo. Las predicciones se mapean de vuelta al espacio original a través de una transformación inversa. Aquí hay un ejemplo de uso de TransformedTargetRegressor con un modelo de regresión lineal y un transformador cuantil:

import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.compose import TransformedTargetRegressor
from sklearn.preprocessing import QuantileTransformer
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

X, y = fetch_california_housing(return_X_y=True)
transformer = QuantileTransformer(output_distribution='normal')
regressor = LinearRegression()
regr = TransformedTargetRegressor(regressor=regressor, transformer=transformer)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
regr.fit(X_train, y_train)
regr.score(X_test, y_test)

FeatureUnion - Espacios de Características Compuestas

La clase FeatureUnion se utiliza para combinar múltiples objetos transformadores en un nuevo transformador que combina su salida. Esto es útil cuando desea aplicar diferentes transformaciones a diferentes características de los datos, como preprocesar texto, números de punto flotante y fechas por separado. Los transformadores se aplican en paralelo, y las matrices de características que generan se concatenan lado a lado en una matriz más grande. Aquí hay un ejemplo:

from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.decomposition import KernelPCA

estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())]
combined = FeatureUnion(estimators)

Resumen

Las tuberías y los estimadores compuestos son herramientas poderosas en scikit-learn para combinar transformadores y estimadores en un solo modelo. Ofrecen conveniencia, selección de parámetros y seguridad de datos. Las tuberías permiten encadenar estimadores, parámetros anidados y caché de transformadores. Los estimadores compuestos como TransformedTargetRegressor y FeatureUnion proporcionan transformaciones y combinación de características, respectivamente. Estos conceptos son esenciales para construir modelos de aprendizaje automático complejos que preprocesen y manipulen datos heterogéneos de manera efectiva.