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.
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.
- De muchos a pocos Abordando datos de alta dimensionalidad con la reducción de dimensionalidad en el aprendizaje automático
- Mejores herramientas de corrección gramatical de IA 2023
- Artículo de Georgia Tech propone un método de IA para identificar superconductores potenciales más rápido
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:
- self
- X (valores de características independientes)
- 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.
- Nuestro transformador personalizado llamado Outlier_Remover tiene dos clases base, a saber, BaseEstimator y TransformerMixin.
- 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.
- No estamos haciendo nada en el método fit().
- 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.
- 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.
- 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.
- 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().
- No es necesario implementar nada en el init ni en el método fit() para este caso.
- 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
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- LG AI Research Propone QASA Un nuevo conjunto de datos de referencia de IA y un enfoque computacional
- La necesidad de un gradiente de explicabilidad en IA
- Sobrevive al Apocalipsis del Mercado Laboral de IA Guía de Supervivencia – Parte 1
- Los 8 mejores complementos de ChatGPT para 2023 (y cómo usarlos)
- LGBMClassifier Una Guía de Inicio Rápido
- Inmersión profunda en las Unidades Recurrentes con Puertas (GRU) Entendiendo las Matemáticas detrás de las RNN
- Explorando NLP – Comenzando con NLP (Paso #1)