Cinco formas de implementar la discretización variable

Aunque las variables continuas en conjuntos de datos del mundo real brindan información detallada, no siempre son la forma más efectiva de modelado e interpretación. Aquí es donde entra en juego la discretización variable.

Comprender la discretización de variables es esencial para los estudiantes de ciencias de datos que construyen bases sólidas de aprendizaje automático y para los ingenieros de inteligencia artificial que diseñan sistemas interpretables.

Al principio de mi trayectoria en la ciencia de datos, me centré principalmente en ajustar hiperparámetros, experimentar con diferentes algoritmos y optimizar las métricas de rendimiento.

Cuando experimenté con métodos de discretización variable, noté cómo ciertos modelos de ML se volvieron más estables e interpretables. Entonces, decidí explicar estos métodos en este artículo.

Qué es la discretización variable?

Algunos funcionan mejor con variables discretas. Por ejemplo, si queremos entrenar un modelo de árbol de decisión en un conjunto de datos con variables continuas, es mejor transformar estas variables en variables discretas para reducir el tiempo de entrenamiento del modelo.

La discretización de variables es el proceso de transformar variables continuas en variables discretas mediante la creación de contenedores, que son un conjunto de intervalos continuos.

Ventajas de la discretización variable

Los árboles de decisión y los modelos bayesianos ingenuos funcionan mejor con variables discretas. Las características discretas son fáciles de entender e interpretar. La discretización puede reducir el impacto de las variables sesgadas y los valores atípicos en los datos.

En resumen, la discretización simplifica los datos y permite que los modelos se entrenen más rápido.

Desventajas de la discretización variable

La principal desventaja de la discretización variable es la pérdida de información que se produce debido a la creación de contenedores. Necesitamos encontrar el número mínimo de contenedores sin una pérdida significativa de información. El algoritmo no puede encontrar este número por sí solo. El usuario debe ingresar el número de contenedores como hiperparámetro del modelo. Luego, el algoritmo encontrará los puntos de corte que coincidan con el número de contenedores.

Discretización supervisada y no supervisada.

Las principales categorías de métodos de discretización son supervisadas y no supervisadas. Los métodos no supervisados ​​determinan los límites de los contenedores utilizando la distribución subyacente de la variable, mientras que los métodos supervisados ​​utilizan valores reales para determinar estos límites.

Tipos de discretización variable

Discretizaremos los siguientes tipos de discretización variable.

Discretización de igual ancho Discretización de igual frecuencia Discretización de intervalo arbitrario Discretización basada en agrupamiento de K-medias Discretización basada en árbol de decisión

Discretización de igual ancho

Como sugiere el nombre, este método crea contenedores del mismo tamaño. El ancho de un contenedor se calcula dividiendo el rango de valores de una variable, X, por el número de contenedores, k.

Ancho = {Máx(X) — Mín(X)} / k

Aquí, k es un hiperparámetro definido por el usuario.

Por ejemplo, si los valores de X oscilan entre 0 y 50 y k = 5, obtenemos 10 como ancho del contenedor y los contenedores son 0–10, 10–20, 20–30, 30–40 y 40–50. Si k = 2, el ancho del contenedor es 25 y los contenedores son 0–25 y 25–50. Entonces, el ancho del contenedor difiere según el valor del hiperparámetro k. La discretización de igual ancho asigna un número diferente de puntos de datos a cada contenedor. Los anchos de los contenedores son los mismos.

Implementemos una discretización de igual ancho utilizando el conjunto de datos Iris. Strategy=’uniform’ en KBinsDiscretizer() crea contenedores de igual ancho.

# Importar bibliotecas importar pandas como pd importar matplotlib.pyplot como plt desde sklearn.datasets importar load_iris desde sklearn.preprocessing importar KBinsDiscretizer # Cargar el conjunto de datos Iris iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) # Seleccionar una característica feature = ‘longitud del sépalo (cm)’ X = df[[feature]]# Inicializar igual_ancho = KBinsDiscretizer( n_bins=15, encode=’ordinal’, estrategia=’uniform’ ) bins_equal_width = igual_width.fit_transform(X) plt.hist(bins_equal_width, bins=15) plt.title(“Discretización de igual ancho”) plt.xlabel(característica) plt.ylabel(“Contar”) plt.show()

Discretización de igual ancho (Imagen del autor)

El histograma muestra intervalos de igual ancho.

Discretización de igual frecuencia

Este método asigna los valores de la variable en los contenedores que contienen una cantidad similar de puntos de datos. Los anchos de los contenedores no son los mismos. El ancho del contenedor está determinado por cuantiles, que dividen los datos en cuatro partes iguales. Aquí también, el usuario define el número de contenedores como un hiperparámetro.

La principal desventaja de la discretización de igual frecuencia es que habrá muchos contenedores vacíos o contenedores con unos pocos puntos de datos si la distribución de los puntos de datos está sesgada. Esto resultará en una pérdida significativa de información.

Implementemos una discretización de igual ancho utilizando el conjunto de datos Iris. Strategy=’quantile’ en KBinsDiscretizer() crea contenedores equilibrados. Cada contenedor tiene (aproximadamente) un número igual de puntos de datos.

# Importar bibliotecas importar pandas como pd desde sklearn.datasets importar load_iris # Cargar el conjunto de datos de Iris iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) # Seleccionar una característica feature = ‘longitud del sépalo (cm)’ X = df[[feature]]# Inicializar igual_freq = KBinsDiscretizer( n_bins=3, encode=’ordinal’, estrategia=’cuantil’ ) bins_equl_freq = igual_freq.fit_transform(X)

Discretización de intervalos arbitrarios

En este método, el usuario asigna los puntos de datos de una variable en contenedores de tal manera que tenga sentido (arbitrario). Por ejemplo, puede asignar los valores de la temperatura variable en contenedores que representan “frío”, “normal” y “caliente”. Se da prioridad al sentido general. No es necesario tener el mismo ancho de contenedor o el mismo número de puntos de datos en un contenedor.

Aquí, definimos manualmente los límites del contenedor según el conocimiento del dominio.

# Importar bibliotecas importar pandas como pd desde sklearn.datasets importar load_iris # Cargar el conjunto de datos de Iris iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) # Seleccionar una característica feature = ‘longitud del sépalo (cm)’ X = df[[feature]]# Definir contenedores personalizados custom_bins = [4, 5.5, 6.5, 8]

df[‘arbitrary’] = pd.cortar( df[feature]bins=bins_personalizados, etiquetas=[0,1,2]
)

K-medias discretización basada en agrupamiento

La agrupación de K-medias se centra en agrupar puntos de datos similares en grupos. Esta característica se puede utilizar para discretización variable. En este método, los contenedores son los grupos identificados por el algoritmo k-means. Aquí también necesitamos definir el número de clusters, k, como un hiperparámetro del modelo. Existen varios métodos para determinar el valor óptimo de k. Lea este artículo para aprender esos métodos.

Aquí utilizamos el algoritmo KMeans para crear grupos que actúan como categorías discretizadas.

# Importar bibliotecas importar pandas como pd desde sklearn.cluster importar KMeans desde sklearn.datasets importar load_iris # Cargar el conjunto de datos de Iris iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) # Seleccionar una característica feature = ‘longitud del sépalo (cm)’ X = df[[feature]]kmeans = KMeans(n_clusters=3, random_state=42) df[‘kmeans’] = kmeans.fit_predict(X)

Discretización basada en árboles de decisión

El proceso de discretización basado en árboles de decisión utiliza árboles de decisión para encontrar los límites de los contenedores. A diferencia de otros métodos, este encuentra automáticamente la cantidad óptima de contenedores. Por lo tanto, el usuario no necesita definir el número de contenedores como un hiperparámetro.

Los métodos de discretización que hemos discutido hasta ahora son métodos supervisados. Sin embargo, este método es un método no supervisado, lo que significa que también utilizamos valores objetivo, y, para determinar los límites.

# Importar bibliotecas importar pandas como pd desde sklearn.cluster importar KMeans desde sklearn.datasets importar load_iris desde sklearn.tree importar DecisionTreeClassifier # Cargar el conjunto de datos de Iris iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) # Seleccionar una característica feature = ‘longitud de sépalo (cm)’ X = df[[feature]]# Obtener los valores objetivo y = iris.target tree = DecisionTreeClassifier( max_leaf_nodes=3, random_state=42 ) tree.fit(X, y) # Obtener el nodo hoja para cada df de muestra[‘decision_tree’] = árbol.apply(X) árbol = DecisionTreeClassifier( max_leaf_nodes=3, random_state=42 ) tree.fit(X, y)

Esta es la descripción general de los métodos de discretización de variables. La implementación de cada método se discutirá en artículos separados.

Este es el final del artículo de hoy.

Por favor, hágamelo saber si tiene alguna pregunta o comentario.

¿Qué tal un curso de IA?

Nos vemos en el próximo artículo. ¡Feliz aprendizaje para ti!

Información del conjunto de datos del iris

Cita: Dua, D. y Graff, C. (2019). Repositorio de aprendizaje automático de la UCI [http://archive.ics.uci.edu/ml]. Irvine, CA: Universidad de California, Facultad de Información y Ciencias de la Computación. Fuente: https://archive.ics.uci.edu/ml/datasets/iris Licencia: RA Fisher posee los derechos de autor de este conjunto de datos. Michael Marshall donó este conjunto de datos al público bajo la Licencia de Dedicación de Dominio Público Creative Commons (CC0). Puede obtener más información sobre los diferentes tipos de licencias de conjuntos de datos aquí.

Diseñado y escrito por:
Rukshan Pramoditha

2025–03–04