Un enfoque simple para crear transformadores personalizados utilizando las clases de Scikit-Learn

Creación de transformadores personalizados con Scikit-Learn

En este artículo, estaré explicando cómo crear un transformador según nuestras necesidades de procesamiento utilizando las clases de Scikit-Learn.

Foto de Jeffery Ho en Unsplash

La preprocesamiento de los datos es uno de los pasos más importantes en el ciclo de vida de la ciencia de datos. Siendo una biblioteca de aprendizaje automático muy popular, Scikit-Learn tiene muchos transformadores predefinidos que nos ayudan a transformar nuestros datos en el formato requerido.

Sin embargo, puede haber casos en los que uno desee realizar alguna operación de procesamiento para la cual Scikit-Learn no tenga un transformador adecuado. Afortunadamente, podemos crear nuestro propio transformador, también conocido como transformador personalizado, para satisfacer nuestras necesidades de preprocesamiento utilizando algunas de las clases de Scikit-Learn de manera muy fácil. Además, la razón por la que alguien querría pasar por el proceso de crear un transformador personalizado (ya que también podemos realizar esas operaciones personalizadas sin un transformador) es que los transformadores personalizados creados utilizando las clases de Scikit-Learn funcionan muy bien con la funcionalidad de Scikit-Learn, como los pipelines, lo cual nos facilita mucho la vida. Si quieres aprender más sobre los Pipelines de Scikit-Learn, echa un vistazo a mi otro artículo.

Usando Pipelines de Scikit-Learn para Automatizar el Entrenamiento y las Predicciones de Modelos de Aprendizaje Automático

En este artículo, intentaré explicar la teoría y el uso de la clase “pipelines” de Scikit-Learn utilizando un ejemplo de codificación…

VoAGI.com

Veamos cómo crear los transformadores personalizados utilizando las clases de Scikit-Learn.

Primero, entendamos la teoría. Para crear un transformador personalizado, solo es necesario implementar tres métodos: fit(), transform() y fit_transform().

Se puede obtener el método fit_transform() de forma gratuita si la clase de transformador personalizado tiene una clase base llamada TransformerMixin. Además, al hacer que la clase BaseEstimator sea una clase base del transformador personalizado, podemos obtener dos métodos, a saber, get_params() y set_params(), que serán muy útiles para obtener y establecer parámetros después de la operación de ajuste de hiperparámetros.

Ahora, entendamos el papel de los métodos fit() y transform() en nuestro transformador personalizado. El método fit() se utiliza para calcular los parámetros que se necesitan para la operación de procesamiento de datos. El método fit() calcula los parámetros requeridos y luego devuelve self (instancia de clase). El método transform() es donde se utilizan los parámetros del método fit() para realizar una transformación de datos. Este método devuelve los datos transformados. Los métodos fit() y transform() toman tres argumentos:

  1. self
  2. X (valores de características independientes)
  3. y (valores de características dependientes)

Para fijar esta idea en nuestra mente, tomemos un ejemplo.

Supongamos que queremos crear un transformador que elimine los valores atípicos de los datos. Para realizar esta operación, necesitamos conocer los valores de Q1 (cuartil 1), Q3 (cuartil 3) y el valor del rango intercuartílico (es decir, Q3 – Q1). Estos valores se calculan en el método fit(). Después de implementar el método fit(), encontraremos los valores atípicos en el método transform() utilizando los parámetros calculados en el método fit().

El otro enfoque sería calcular el parámetro y realizar la transformación solo en el método transform(). En este caso, el método fit() solo devolverá self (instancia de clase).

Intentemos crear nosotros mismos un transformador personalizado. Tomemos el ejemplo de los valores atípicos explicado anteriormente. Haremos un ligero cambio en nuestro código. En lugar de eliminar por completo los valores atípicos, los reemplazaremos por la mediana de los datos.

## creando un transformador personalizado para tratar con los valores atípicos de los datosfrom sklearn.base import BaseEstimator, TransformerMixinclass Remover_Valores_Atipicos(BaseEstimator, TransformerMixin):        def __init__(self, lista_de_nombres_de_características = lista_de_características_notables):         self.lista_de_nombres_de_características = lista_de_nombres_de_características        def fit(self, X, y=None):        return self        def transform(self, X, y=None):        cuartiles = X[lista_de_características_notables].quantile(np.arange(0,1,0.25)).T        cuartiles = cuartiles.rename(columns={0.25:'Q1', 0.50: 'Q2', 0.75:'Q3'})                cuartiles['IQR'] = cuartiles['Q3'] - cuartiles['Q1']        cuartiles['Límite_Inferior'] = cuartiles['Q1'] - 1.5*cuartiles['IQR']        cuartiles['Límite_Superior'] = cuartiles['Q3'] + 1.5*cuartiles['IQR']                for característica in lista_de_características_notables:            X[característica] = np.where((X[característica] < cuartiles.loc[característica,'Límite_Inferior']) |                                   (X[característica] > cuartiles.loc[característica,'Límite_Superior']) & (X[característica] is not np.nan),                                    X[característica].median(), X[característica])                return X

Entendamos el código anterior línea por línea.

  1. Nuestro transformador personalizado llamado Outlier_Remover tiene dos clases base, a saber, BaseEstimator y TransformerMixin.
  2. Estamos tomando la lista de nombres de características numéricas como entrada para la clase de transformador personalizado utilizando un método init. Esto se debe a que encontraremos los valores atípicos solo en las características numéricas.
  3. No estamos haciendo nada en el método fit().
  4. Todo el trabajo relacionado con los valores atípicos se realiza en el método transform. Primero, encontramos los valores del cuartil1, cuartil2 y cuartil3. Luego, utilizando los valores encontrados, encontramos el rango intercuartílico.
  5. Ahora que tenemos los valores de cuartil1, cuartil3 y rango intercuartílico, reemplazaremos los valores atípicos que son mayores que el valor de (cuartil3 + 1.5 x rango intercuartílico) y que son menores que el valor de (cuartil1-1.5 x rango intercuartílico) con la mediana de los datos.
  6. Por último, hemos devuelto los datos transformados, es decir, X.

Tomemos otro ejemplo: crearemos un transformador personalizado para eliminar características inútiles (también conocidas como columnas) de nuestros datos.

## Creando un transformador personalizado para eliminar las características inútilesclass Remove_Useless_Features(BaseEstimator, TransformerMixin):        def __init__(self):        pass        def fit(self, X, y=None):        return self        def transform(self, X, y=None):        X.drop(columns=['Alley','PoolQC'], axis=1, inplace=True)        return X

Nuevamente, entendamos este código línea por línea.

  1. Nuestro transformador personalizado llamado Remove_Useless_Features tiene dos clases base, a saber, BaseEstimator y TransformerMixin. Esto nos otorgará los métodos fit_transform(), get_params() y set_params().
  2. No es necesario implementar nada en el init ni en el método fit() para este caso.
  3. El método transform() utiliza el método drop() de pandas para eliminar características inútiles del conjunto de datos y devuelve el conjunto de datos después de la transformación.

Espero que los ejemplos anteriores hayan aclarado el concepto de los transformadores personalizados. Si tienes alguna duda, no dudes en comentar. Además, si quieres saber cómo utilizar estos transformadores personalizados en los pipelines de Scikit-Learn, echa un vistazo a mi otro artículo aquí.

El código de este artículo está tomado de mi cuenta de Kaggle. Echa un vistazo al código completo:

Predicción de precios de viviendas – pipelines de sklearn

Explora y ejecuta código de aprendizaje automático con Kaggle Notebooks | Usando datos de House Prices – Regresión avanzada …

www.kaggle.com

Outro

Espero que te haya gustado este artículo. Sígueme en VoAGI para leer más artículos como este.

Conéctate conmigo en

LinkedIn

Sitio web

Envíame un correo a [email protected]

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Herramientas principales de detección de contenido de Inteligencia Artificial (IA)

La Inteligencia Artificial (IA) y las técnicas de Procesamiento del Lenguaje Natural (NLP) se utilizan en el proceso ...

Inteligencia Artificial

El Ascenso y Caída de la Ingeniería Rápida ¿Moda o Futuro?

Este artículo proporciona una visión general de la ingeniería rápida, desde sus inicios hasta su estado actual.

Inteligencia Artificial

Satélites Sentinel mapean superemisores de metano

Un equipo internacional de investigadores ha desarrollado un algoritmo que utiliza el aprendizaje automático para det...

Inteligencia Artificial

Esta herramienta podría proteger tus imágenes de la manipulación de IA

PhotoGuard, creado por investigadores del MIT, altera las fotos de formas imperceptibles para nosotros pero evita que...

Inteligencia Artificial

Conoce a Prismer Un modelo de visión-lenguaje de código abierto con un conjunto de expertos.

Varios modelos recientes de visión y lenguaje han demostrado notables habilidades de generación multimodal. Pero típi...