¿Cómo crear un transformador de datos personalizado usando sklearn?

Estás leyendo la publicación: ¿Cómo crear un transformador de datos personalizado usando sklearn?

Sklearn es un paquete de aprendizaje automático basado en Python que proporciona una colección de varias transformaciones de datos para modificar los datos según las necesidades. Muchos procesos simples de limpieza de datos, como la eliminación de columnas, etc., a menudo se realizan manualmente en los datos, por lo que necesitamos usar un código personalizado. El paquete sklearn proporciona un mecanismo para estandarizar estas transformaciones de datos únicas para que puedan usarse como cualquier otra transformación, ya sea directamente en los datos o como parte de la canalización de modelado. En este artículo, aprenderá a crear y aplicar transformaciones de datos personalizadas para sklearn. Los siguientes son los artículos a cubrir.

Tabla de contenido

  1. ¿Cómo se construye un transformador de datos personalizado usando sklearn?
  2. Crear transformador personalizado

Comencemos con la comprensión del transformador de datos personalizado.

¿Cómo se construye un transformador de datos personalizado usando sklearn?

El sklearn, que es un paquete de aprendizaje automático basado en Python, proporciona directamente muchos preparación de datos estrategias, como escalar variables de entrada numéricas y modificar distribuciones de probabilidad de variables. El proceso de modificar datos sin procesar para que se ajusten a los algoritmos de aprendizaje automático se conoce como preparación de datos.

Al evaluar el rendimiento del modelo utilizando enfoques de muestreo de datos como la validación cruzada de k-fold, estas transformaciones permitirán ajustar y aplicar las transformaciones a un conjunto de datos sin fugas de datos.

Si bien las técnicas de preparación de datos proporcionadas por sklearn son integrales, puede ser necesario realizar procesos de preparación de datos adicionales. Estos procesos adicionales a menudo se realizan manualmente antes del modelado y necesitan la creación de un código personalizado. El peligro es que estas etapas de preparación de datos se lleven a cabo de manera inconsistente.

El enfoque es usar la clase FunctionTransformer para construir una transformación de datos personalizada en sklearn. Esta clase permite al usuario definir una función que se invocará para cambiar los datos. Definir la función y realizar cualquier alteración válida, como modificar los valores o eliminar columnas de datos (no eliminar filas). Luego, la clase se puede usar en sklearn como cualquier otra transformación de datos, por ejemplo, para convertir datos directamente o en una canalización de modelado.

🔥 Recomendado:  ChatGPT pronto podría asistir a las reuniones por usted: así es como funciona

Antes de continuar con la creación de un transformador personalizado, aquí hay un par de cosas con las que vale la pena familiarizarse:

  • Usando scikit-learn Transformers in Pipelines o usando la técnica fit transform().
  • Creación de clases, herencia y el método super() en Python.

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos, echa un vistazo aquí.

Crear transformador personalizado

Simplemente necesitamos cumplir con algunos parámetros fundamentales para desarrollar un transformador personalizado:

  • Inicializar una clase de transformador.
  • Esta clase hereda las clases BaseEstimator y TransformerMixin de los módulos sklearn.base.
  • Los métodos de instancia fit() y transform() son implementados por la clase(). Para ser compatibles con Pipelines, estos métodos deben tener argumentos tanto X como Y, y transform() debe devolver una matriz Pandas DataFrame o NumPy.

Crear un transformador personalizado básico

from numpy.random import randint from sklearn.base import BaseEstimator, TransformerMixin class basictransformer(BaseEstimator, TransformerMixin): def fit(self, X, y=Ninguno): return self def transform(self, X, y=Ninguno): X[“cust_num”] = randint(0, 10, forma X[0]) devuelve X df_basic = pd.DataFrame({“a”: [1, 2, 3]”b”: [4, 5, 6]”C”: [7, 8, 9]}) tubería = tubería (pasos =[
(“use_custom_transformer”, basicTransformer())
]
) transform_df = pipe.fit_transform(df_basic) df_basic

Se crea una clase personalizada, en la que se definen las funciones de ajuste y transformación. Ambas funciones son necesarias para que la tubería funcione sin problemas. La canalización realizará todas las operaciones que se mencionan en la clase. Y el marco de datos de salida se vería como la imagen de abajo.

Construyamos un transformador personalizado y aplíquelo al marco de datos y predigamos algunos valores. Comenzando con la importación de bibliotecas necesarias para las operaciones.

importar numpy como np importar pandas como pd de sklearn.metrics importar mean_squared_error,r2_score de sklearn.pipeline importar FeatureUnion, Pipeline, make_pipeline de sklearn.base importar BaseEstimator, TransformerMixin de sklearn.linear_model importar LinearRegression de sklearn.model_selection importar train_test_split

🔥 Recomendado:  Cómo ganar dinero cocinando en casa

Lectura, preprocesamiento y análisis de datos:

Este artículo utiliza un conjunto de datos relacionados con el sector de seguros en el que se predecirá el costo del seguro en función de diferentes características y observaciones.

df=pd.read_csv(“/content/insurance.csv”) df_util=pd.get_dummies(data=df,columns=[‘sex’,’smoker’,’region’],drop_first=Verdadero)

Este gráfico representa la distribución de los cargos de seguro con respecto al índice de masa corporal (IMC) de los clientes y categorizados por su edad.

Dividir los datos para entrenar y validar según la proporción estándar de 70:30.

X=df_util.drop([‘charges’],eje=1) y=df_util[‘charges’]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=42)

Cree un transformador personalizado y utilícelo para transformar los datos del tren para los alumnos.

class CustomTransformer(BaseEstimator, TransformerMixin): def __init__(self, nombre_función, parámetro_adicional = “SM”): print(‘\n…intializing\n’) self.nombre_función = nombre_función self.parámetro_adicional = parámetro_adicional def fit(self, X, y = Ninguno): print(‘\ndatos de ajuste…\n’) print(f’\n \U0001f600 {self.additional_param}\n’) return self def transform(self, X, y = None) : print(‘\n…transformando datos \n’) X_ = X.copy() X_[self.feature_name] = np.log(X_[self.feature_name]) return X print(“creando una segunda tubería…”) tubería2 = Tubería(pasos=[
(‘experimental_trans’, CustomTransformer(‘bmi’)),
(‘linear_model’, LinearRegression())
]) print(“tubería de ajuste 2″) pipe2.fit(X_train, y_train) preds2 = pipe2.predict(X_test) print(f”RMSE: {np.sqrt(mean_squared_error(y_test, preds2))}\n”)

Se emplea la canalización ya que sería difícil aplicar todas estas etapas secuencialmente con bloques de código individuales. Debido a que las canalizaciones siguen secuenciando en un solo bloque de código, la canalización misma se convierte en un estimador, capaz de completar todas las operaciones en una sola instrucción.

Hay algunas cosas adicionales agregadas en la clase si se compara con el transformador básico anterior. En este transformador, el usuario puede mencionar los nombres de las características sobre las que se deben realizar las operaciones. Este proceso se conoce como paso de argumentos.

El modelo de regresión lineal se crea utilizando el transformador personalizado. El transformador está convirtiendo los valores en registros para que el alumno disminuya el sesgo hacia valores más grandes. Este tipo de sesgo es común en los modelos de regresión lineal.

🔥 Recomendado:  AI Service KickResume puede ayudarlo a crear el CV perfecto

La representación anterior es un gráfico de regresión entre los cargos de seguro observados y los cargos de seguro previstos. Se puede observar que la recta de regresión está explicando adecuadamente la relación.

Entonces, hasta ahora podemos construir el transformador personalizado y utilizarlo para predecir los valores. Pero, ¿qué pasa si queremos personalizar el transformador existente que ofrece sklearn? Personalicemos el codificador ordinal e implementémoslo en los datos utilizados anteriormente.

de sklearn.preprocessing importar OrdinalEncoder

from sklearn.preprocessing import OrdinalEncoder class CustEncoder(OrdinalEncoder): def __init__(self, **kwargs): super().__init__(**kwargs) def transform(self, X, y=Ninguno): datos_transformados = super(). transform(X) datos_codificados = pd.DataFrame(datos_transformados, columnas=self.feature_names_in_) return datos_codificados data = df[[‘sex’,’smoker’,’region’]]enc = Codificador Cliente(dtype=int) nuevos_datos = enc.fit_transform(datos) nuevos_datos[:8]

Al usar el método super(), cualquier transformador predefinido podría personalizarse según la necesidad.

Conclusión

Los transformadores personalizados brindan un alto grado de libertad y control para el preprocesamiento de datos. Los encontramos particularmente útiles en este artículo para encapsular una fase en el proceso de procesamiento de datos, haciendo que el código sea mucho más comprensible. Se pueden construir más de estos transformadores personalizados en función de los requisitos utilizando la biblioteca de aprendizaje de scikit; Dale un tiro; valdrá la pena.

Referencias

Tabla de Contenido