ScikitLearn
Tutorial ScikitLearn: Escalado de datos
Scikit-Learn: Escalado de datos. Aprende cómo utilizar MinMaxScaler, StandardScaler y RobustScaler para mejorar el preprocesamiento en aprendizaje automático.
Aprende ScikitLearn GRATIS y certifícate¿Qué son y qué diferencias hay entre escalado, estandarización y normalización?
En el ámbito del aprendizaje automático, es esencial preparar correctamente los datos antes de aplicar cualquier modelo. Tres técnicas fundamentales en el preprocesamiento de datos son el escalado, la estandarización y la normalización. Aunque a veces se utilizan indistintamente, cada una tiene objetivos y métodos diferentes.
El escalado consiste en ajustar las características para que se encuentren dentro de un rango específico, normalmente entre 0 y 1. Esto es útil cuando las variables tienen unidades o magnitudes distintas, evitando que una característica domine a las demás. Por ejemplo, se puede aplicar el escalado mediante el MinMaxScaler de Scikit-Learn:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_escalado = scaler.fit_transform(X)
La estandarización transforma las características para que tengan una media cero y una desviación estándar unitaria. Esto es especialmente importante cuando los datos siguen una distribución aproximadamente normal. La estandarización ayuda a que los algoritmos converjan más rápidamente y mejora el rendimiento de modelos sensibles a la escala de las variables. Se puede realizar con el StandardScaler:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_estandarizado = scaler.fit_transform(X)
Por otro lado, la normalización ajusta los datos para que cada observación tenga una longitud de vector unitaria. Esto implica que se normaliza cada muestra individualmente, haciendo que todas tengan la misma magnitud. La normalización es útil cuando se trabaja con algoritmos basados en distancia, como los métodos de vecinos más cercanos o en procesamiento del lenguaje natural. Para normalizar los datos, se utiliza el Normalizer:
from sklearn.preprocessing import Normalizer
normalizer = Normalizer()
X_normalizado = normalizer.fit_transform(X)
Es importante distinguir entre estas técnicas:
- El escalado ajusta el rango de las características, pero mantiene la forma original de la distribución de los datos.
- La estandarización centra las características en cero y las escala según su variabilidad, lo que puede mejorar el rendimiento de modelos lineales.
- La normalización modifica las observaciones para que tengan la misma magnitud, preservando la dirección de los datos en un espacio multidimensional.
La elección entre escalado, estandarización y normalización depende del algoritmo de aprendizaje y de las características del conjunto de datos. Algunos algoritmos, como las redes neuronales o las máquinas de soporte vectorial, pueden requerir estandarización para funcionar correctamente, mientras que otros se benefician del escalado o la normalización.
MinMaxScaler
El MinMaxScaler es una herramienta fundamental en Scikit-Learn para realizar el escalado de características. Transforma las variables numéricas reescalándolas al rango especificado, normalmente entre 0 y 1. Este proceso es crucial cuando las distintas características tienen unidades o escalas diferentes, ya que evita que unas dominen sobre otras en el entrenamiento del modelo.
El funcionamiento del MinMaxScaler se basa en la siguiente fórmula:
$$
X_{\text{escalado}} = \frac{X - X_{\min}}{X_{\max} - X_{\min}} \times (r_{\text{máx}} - r_{\text{mín}}) + r_{\text{mín}}
$$
donde $( X )$ es el valor original, $( X_{\min} )$ y $( X_{\max} )$ son el mínimo y máximo de la característica, y $( r_{\text{mín}} )$ y $( r_{\text{máx}} )$ son los límites del rango deseado.
Para utilizar el MinMaxScaler, se sigue el siguiente procedimiento en Python:
from sklearn.preprocessing import MinMaxScaler
import numpy as np
# Datos de ejemplo
X = np.array([[1.0, -1.0, 2.0],
[2.0, 0.0, 0.0],
[0.0, 1.0, -1.0]])
# Inicialización del scaler
scaler = MinMaxScaler()
# Ajuste y transformación de los datos
X_escalado = scaler.fit_transform(X)
print("Datos escalados:")
print(X_escalado)
En este ejemplo, se importan las librerías necesarias y se crea una matriz numpy ( X ) con los datos. Se instancia el MinMaxScaler, se ajusta y transforma ( X ) usando el método fit_transform
, y finalmente se imprimen los datos escalados.
El MinMaxScaler también permite especificar el rango al que se desea escalar las características mediante el parámetro feature_range
. Por defecto, este rango es ((0, 1)), pero se puede modificar según las necesidades:
# Escalado al rango [-1, 1]
scaler = MinMaxScaler(feature_range=(-1, 1))
X_escalado = scaler.fit_transform(X)
print("Datos escalados al rango [-1, 1]:")
print(X_escalado)
Este escalado al rango ([-1, 1]) puede ser útil en algoritmos que son sensibles al signo de las características.
Es importante destacar que el ajuste (fit
) del scaler debe realizarse únicamente sobre el conjunto de entrenamiento para evitar fugas de información al conjunto de prueba. Posteriormente, se aplica la transformación al conjunto de prueba utilizando el scaler ya ajustado:
# División de los datos en entrenamiento y prueba
from sklearn.model_selection import train_test_split
X_entrenamiento, X_prueba = train_test_split(X, test_size=0.2, random_state=42)
# Ajuste del scaler solo con el entrenamiento
scaler.fit(X_entrenamiento)
# Transformación de ambos conjuntos
X_entrenamiento_escalado = scaler.transform(X_entrenamiento)
X_prueba_escalado = scaler.transform(X_prueba)
De esta manera, se garantiza que el escalado refleje correctamente las características del conjunto de entrenamiento y no introduzca sesgos derivados del conjunto de prueba.
El MinMaxScaler es especialmente útil en algoritmos basados en distancia, como los métodos de vecinos más cercanos, o en redes neuronales, donde las escalas de las características pueden afectar significativamente al rendimiento del modelo.
Sin embargo, es conveniente tener en cuenta que el MinMaxScaler es sensible a los valores atípicos. La presencia de outliers puede distorsionar el rango de las características y, por ende, el escalado. En tales casos, puede ser preferible utilizar el RobustScaler, que es más robusto frente a outliers.
Para visualizar el efecto del escalado, se puede comparar la distribución de las características antes y después de aplicar el MinMaxScaler:
import matplotlib.pyplot as plt
# Antes del escalado
plt.subplot(1, 2, 1)
plt.boxplot(X)
plt.title("Antes del escalado")
# Después del escalado
plt.subplot(1, 2, 2)
plt.boxplot(X_escalado)
plt.title("Después del escalado")
plt.tight_layout()
plt.show()
En este código, se utilizan gráficos de cajas para mostrar cómo el escalado afecta a la distribución de los datos. Las características escaladas se ajustan al rango especificado, facilitando la comparabilidad entre ellas.
Al emplear el MinMaxScaler, es fundamental integrar el proceso de escalado dentro de un Pipeline de Scikit-Learn, especialmente en entornos de producción o al realizar validación cruzada. Esto asegura que las transformaciones se apliquen de manera consistente y evita errores comunes.
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
# Creación del pipeline
pipeline = Pipeline([
('scaler', MinMaxScaler()),
('regresion', LinearRegression())
], memory = None)
# Datos de ejemplo para variable objetivo
y_entrenamiento = np.array([0, 1])
# Entrenamiento del modelo
pipeline.fit(X_entrenamiento, y_entrenamiento)
# Predicción
y_pred = pipeline.predict(X_prueba)
En este ejemplo, el MinMaxScaler se incluye como un paso dentro del pipeline, seguido de un modelo de regresión lineal. Esto garantiza que el escalado se aplique correctamente en cada fase del entrenamiento y la predicción.
El MinMaxScaler es una herramienta esencial para el preprocesamiento de datos en aprendizaje automático. Al reescalar las características al rango deseado, mejora la eficiencia y el rendimiento de los algoritmos de aprendizaje, asegurando que todas las variables contribuyan de manera equilibrada al modelo.
StandardScaler
El StandardScaler es una herramienta esencial en Scikit-Learn para realizar la estandarización de características. Este proceso transforma las variables para que tengan una media cero y una desviación estándar unitaria, lo cual es fundamental en muchos algoritmos de aprendizaje automático sensibles a la escala de los datos.
El StandardScaler aplica la siguiente fórmula a cada característica:
$$
X_{\text{estandarizado}} = \frac{X - \mu}{\sigma}
$$
donde $( X )$ es el valor original, $( \mu )$ es la media de la característica y $( \sigma )$ es la desviación estándar.
Para utilizar el StandardScaler en Python con Scikit-Learn, se sigue este procedimiento:
from sklearn.preprocessing import StandardScaler
import numpy as np
# Datos de ejemplo
X = np.array([[1.0, -1.0, 2.0],
[2.0, 0.0, 0.0],
[0.0, 1.0, -1.0]])
# Inicialización del scaler
scaler = StandardScaler()
# Ajuste y transformación de los datos
X_estandarizado = scaler.fit_transform(X)
print("Datos estandarizados:")
print(X_estandarizado)
En este ejemplo, se importa el StandardScaler y se crea un conjunto de datos ( X ). Luego, se instancia el StandardScaler y se aplica el método fit_transform
para ajustar y transformar los datos simultáneamente. Los datos estandarizados resultantes se imprimen para su análisis.
Tras la estandarización, cada característica tiene una media aproximadamente cero y una desviación estándar unitaria. Esto se puede verificar calculando estos valores:
# Cálculo de la media y desviación estándar de las características estandarizadas
media = X_estandarizado.mean(axis=0)
desviacion = X_estandarizado.std(axis=0)
print("Media de las características estandarizadas:")
print(media)
print("Desviación estándar de las características estandarizadas:")
print(desviacion)
El StandardScaler es especialmente útil en algoritmos como regresión logística, máquinas de soporte vectorial o redes neuronales, donde la escala de las características influye en el rendimiento y la convergencia.
Cuando se trabaja con conjuntos de datos de entrenamiento y prueba, es crucial ajustar el StandardScaler únicamente con el conjunto de entrenamiento y luego aplicar la transformación al conjunto de prueba para evitar fugas de información:
from sklearn.model_selection import train_test_split
# División de los datos en entrenamiento y prueba
X_entrenamiento, X_prueba = train_test_split(X, test_size=0.2, random_state=42)
# Ajuste del scaler solo con el entrenamiento
scaler.fit(X_entrenamiento)
# Transformación de ambos conjuntos
X_entrenamiento_estandarizado = scaler.transform(X_entrenamiento)
X_prueba_estandarizado = scaler.transform(X_prueba)
De esta manera, el scaler refleja únicamente la distribución del conjunto de entrenamiento, asegurando una evaluación más realista del modelo.
El StandardScaler permite acceder a los parámetros calculados durante el ajuste mediante los atributos mean_
y scale_
:
print("Media calculada por el scaler:")
print(scaler.mean_)
print("Desviación estándar calculada por el scaler:")
print(scaler.scale_)
Estos valores son útiles para interpretar el preprocesamiento aplicado y comprender cómo se ha transformado cada característica.
Integrar el StandardScaler en un Pipeline es una buena práctica para mantener un flujo de trabajo organizado y reproducible:
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
# Creación del pipeline
pipeline = Pipeline([
('scaler', StandardScaler()),
('clasificador', LogisticRegression())
], memory = None)
# Datos de ejemplo para la variable objetivo
y_entrenamiento = np.array([0, 1])
# Entrenamiento del modelo
pipeline.fit(X_entrenamiento, y_entrenamiento)
# Predicción en el conjunto de prueba
y_pred = pipeline.predict(X_prueba)
En este ejemplo, el StandardScaler se combina con un modelo de regresión logística. El pipeline asegura que el escalado y el modelado se realicen de forma secuencial y coherente.
Para visualizar el efecto de la estandarización, se pueden comparar las características antes y después de aplicar el StandardScaler:
import matplotlib.pyplot as plt
# Antes de la estandarización
plt.subplot(1, 2, 1)
plt.boxplot(X)
plt.title("Antes de la estandarización")
# Después de la estandarización
plt.subplot(1, 2, 2)
plt.boxplot(X_estandarizado)
plt.title("Después de la estandarización")
plt.tight_layout()
plt.show()
Los gráficos de cajas muestran cómo la estandarización centra las características y ajusta su dispersión, facilitando la comparación y el análisis.
Es importante tener en cuenta que el StandardScaler asume que las características siguen una distribución gaussiana. Si los datos presentan valores atípicos o distribuciones no normales, puede ser más apropiado utilizar el RobustScaler, que emplea estadísticas robustas como la mediana y el rango intercuartílico.
Cuando se trabaja con DataFrames de pandas, es posible mantener las etiquetas de las columnas al aplicar el StandardScaler:
import pandas as pd
# Datos de ejemplo en un DataFrame
df = pd.DataFrame({
'Característica 1': [1.0, 2.0, 0.0],
'Característica 2': [-1.0, 0.0, 1.0],
'Característica 3': [2.0, 0.0, -1.0]
})
# Inicialización del scaler
scaler = StandardScaler()
# Ajuste y transformación manteniendo las columnas
df_estandarizado = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print("DataFrame estandarizado:")
print(df_estandarizado)
Así, se facilita el trabajo con los datos estandarizados sin perder información sobre las características.
El uso del StandardScaler mejora el rendimiento de muchos algoritmos de aprendizaje automático, ya que elimina las diferencias de escala entre las características y promueve una convergencia más rápida durante el entrenamiento. Al centrar las variables y ajustar su dispersión, se asegura que todas las características contribuyan equitativamente al modelo, evitando que algunas dominen sobre otras debido a su escala.
RobustScaler
El RobustScaler es una herramienta esencial en Scikit-Learn que permite escalar características utilizando estadísticos robustos como la mediana y el rango intercuartílico (IQR). Esto lo hace especialmente útil cuando los datos contienen valores atípicos, ya que es menos sensible a los outliers en comparación con otros métodos de escalado como el StandardScaler o el MinMaxScaler.
El RobustScaler estandariza las características sustrayendo la mediana y dividiendo por el rango intercuartílico, según la siguiente fórmula:
$$
X_{\text{escalado}} = \frac{X - \text{mediana}(X)}{\text{IQR}(X)}
$$
donde IQR(X) es la diferencia entre el percentil 75 y el percentil 25 de la característica $( X )$. Al utilizar medidas de posición y dispersión robustas, el escalado es menos afectado por valores extremos en los datos.
Para ilustrar el uso del RobustScaler, consideremos un conjunto de datos con valores atípicos:
import numpy as np
from sklearn.preprocessing import RobustScaler
# Datos de ejemplo con valores atípicos
X = np.array([[1.0, -2.0, 2.0],
[2.0, -1.0, 3.0],
[3.0, 0.0, 2.0],
[4.0, 1.0, 1.0],
[100.0, 2.0, 0.0]]) # Valor atípico en la primera característica
# Inicialización del RobustScaler
scaler = RobustScaler()
# Ajuste y transformación de los datos
X_escalado = scaler.fit_transform(X)
print("Datos escalados con RobustScaler:")
print(X_escalado)
En este ejemplo, se observa que la primera característica tiene un valor atípico de 100.0, mientras que el resto de los valores se sitúan entre 1.0 y 4.0. Al aplicar el RobustScaler, el impacto de este valor atípico se minimiza, garantizando que las demás observaciones no se vean distorsionadas por su presencia.
Es importante destacar que el RobustScaler no centra los datos en cero de forma predeterminada. Sin embargo, se puede modificar este comportamiento utilizando el parámetro with_centering=True
. Además, si se desea escalar los datos sin centrar, se puede establecer with_centering=False
.
El RobustScaler ofrece los siguientes parámetros clave:
with_centering
: determina si se resta la mediana a cada característica. Por defecto es True.with_scaling
: determina si se escalan las características dividiendo por el rango intercuartílico. Por defecto es True.quantile_range
: especifica el rango de cuantiles utilizado para calcular el IQR. Por defecto es (25.0, 75.0).
Por ejemplo, si se desea utilizar un rango de cuantiles diferente, como el 10% y el 90%, se puede ajustar el parámetro quantile_range
de la siguiente manera:
# Ajuste del RobustScaler con un rango de cuantiles personalizado
scaler = RobustScaler(quantile_range=(10.0, 90.0))
X_escalado_personalizado = scaler.fit_transform(X)
print("Datos escalados con cuantiles 10% y 90%:")
print(X_escalado_personalizado)
Este ajuste puede ser útil cuando los datos tienen una distribución particular y se desea utilizar un rango intercuartílico adaptado a las características del conjunto de datos.
Al igual que con otros escaladores, es fundamental ajustar el RobustScaler únicamente con el conjunto de entrenamiento para evitar fugas de información. Posteriormente, se aplica la transformación al conjunto de prueba utilizando el scaler ya ajustado:
from sklearn.model_selection import train_test_split
# División de los datos en entrenamiento y prueba
X_entrenamiento, X_prueba = train_test_split(X, test_size=0.2, random_state=42)
# Ajuste del scaler solo con el entrenamiento
scaler.fit(X_entrenamiento)
# Transformación de ambos conjuntos
X_entrenamiento_escalado = scaler.transform(X_entrenamiento)
X_prueba_escalado = scaler.transform(X_prueba)
De esta manera, se asegura que el escalado refleja correctamente las características del conjunto de entrenamiento, sin incorporar información del conjunto de prueba que pudiera sesgar el modelo.
El RobustScaler es especialmente beneficioso en aplicaciones donde los valores atípicos están presentes y son irrelevantes o representan errores de medición. Al reducir la influencia de estos outliers, se obtiene un escalado más representativo de la mayoría de los datos, mejorando el rendimiento de los algoritmos de aprendizaje automático.
Para visualizar el efecto del RobustScaler en comparación con otros escaladores, se puede realizar una comparación gráfica utilizando gráficos de cajas:
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# Ajuste y transformación con otros escaladores
scaler_standard = StandardScaler()
X_standard = scaler_standard.fit_transform(X)
scaler_minmax = MinMaxScaler()
X_minmax = scaler_minmax.fit_transform(X)
# Creación de subgráficos
fig, axs = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
# Datos originales
axs[0].boxplot(X)
axs[0].set_title('Datos originales')
# StandardScaler
axs[1].boxplot(X_standard)
axs[1].set_title('StandardScaler')
# MinMaxScaler
axs[2].boxplot(X_minmax)
axs[2].set_title('MinMaxScaler')
# RobustScaler
axs[3].boxplot(X_escalado)
axs[3].set_title('RobustScaler')
plt.tight_layout()
plt.show()
En este código, se aplican tres métodos de escalado diferentes a los mismos datos, incluyendo el RobustScaler. Los gráficos permiten observar cómo cada método maneja los valores atípicos y cómo afectan a la distribución de las características tras el escalado.
Es recomendable integrar el RobustScaler dentro de un Pipeline de Scikit-Learn para asegurar un flujo de trabajo coherente y evitar errores en el preprocesamiento:
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
# Creación del pipeline
pipeline = Pipeline([
('escalador', RobustScaler()),
('modelo', LinearRegression())
], memory = None)
# Datos de ejemplo para la variable objetivo
y = np.array([10, 15, 14, 20, 25])
# Entrenamiento del modelo
pipeline.fit(X, y)
# Predicción
y_pred = pipeline.predict(X)
print("Predicciones del modelo:")
print(y_pred)
Al incluir el RobustScaler en el pipeline, se garantiza que el escalado se aplique correctamente en cada fase del entrenamiento y la predicción, facilitando la reproducibilidad y mantenibilidad del código.
Es importante tener en cuenta que, aunque el RobustScaler es eficaz para manejar valores atípicos, no elimina estos datos ni corrige posibles errores en el conjunto de datos. Si los outliers son el resultado de errores de medición o entrada de datos, es recomendable realizar una limpieza de datos adicional para mejorar la calidad del conjunto de datos.
Cuando se trabaja con DataFrames de pandas, se puede aplicar el RobustScaler manteniendo los nombres de las columnas:
import pandas as pd
# Creación de un DataFrame con los datos
df = pd.DataFrame(X, columns=['Característica 1', 'Característica 2', 'Característica 3'])
# Aplicación del RobustScaler
df_escalado = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print("DataFrame escalado con RobustScaler:")
print(df_escalado)
De este modo, se facilita la interpretación de los resultados y se mantiene la coherencia en el manejo de los datos.
El RobustScaler es compatible con otras transformaciones y técnicas de preprocesamiento en Scikit-Learn, permitiendo combinarlo con métodos de imputación, codificación de variables categóricas u otras formas de ingeniería de características.
Comparación de métodos de escalado
En el preprocesamiento de datos, elegir el método de escalado adecuado es fundamental para mejorar el rendimiento de los modelos de aprendizaje automático. Los tres escaladores más utilizados en Scikit-Learn son MinMaxScaler, StandardScaler y RobustScaler, cada uno con características específicas que los hacen más o menos adecuados según el conjunto de datos.
- El MinMaxScaler reescala las características a un rango específico, generalmente entre 0 y 1. Este método preserva la forma original de la distribución de los datos y es útil cuando no hay valores atípicos significativos. Sin embargo, es sensible a los outliers, ya que estos pueden comprimir los valores de la mayoría de las muestras al extremo inferior del nuevo rango.
- Por su parte, el StandardScaler estandariza las características para que tengan una media cero y una desviación estándar unitaria. Es apropiado cuando los datos siguen una distribución aproximadamente normal. Sin embargo, puede ser afectado por valores atípicos, ya que utiliza la media y la desviación estándar, las cuales son sensibles a los outliers.
- El RobustScaler se basa en estadísticas robustas como la mediana y el rango intercuartílico (IQR) para escalar las características. Esto lo hace menos sensible a los valores atípicos y es más adecuado para conjuntos de datos con outliers. Al utilizar la mediana y el IQR, el escalado refleja mejor la dispersión central de los datos.
Para ilustrar las diferencias entre estos métodos, consideremos un conjunto de datos con un valor atípico:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
# Creación de datos con un valor atípico
X = np.array([[1], [2], [2], [3], [4], [100]])
df = pd.DataFrame(X, columns=['Valor Original'])
# Visualización de los datos originales
plt.figure(figsize=(6, 4))
plt.boxplot(X)
plt.title('Datos Originales')
plt.show()
Aplicamos los tres métodos de escalado a los datos:
# MinMaxScaler
min_max_scaler = MinMaxScaler()
X_minmax = min_max_scaler.fit_transform(X)
df['MinMaxScaler'] = X_minmax
# StandardScaler
standard_scaler = StandardScaler()
X_standard = standard_scaler.fit_transform(X)
df['StandardScaler'] = X_standard
# RobustScaler
robust_scaler = RobustScaler()
X_robust = robust_scaler.fit_transform(X)
df['RobustScaler'] = X_robust
print(df)
Los resultados muestran cómo cada escalador maneja el valor atípico:
- MinMaxScaler: Reescala todos los valores al rango entre 0 y 1. El valor atípico hace que los demás valores queden muy próximos a 0, perdiendo detalle en la variación entre ellos.
- StandardScaler: Estandariza los datos con media cero y desviación estándar unitaria. El outlier afecta significativamente a la media y la desviación estándar, distorsionando la escala de las otras observaciones.
- RobustScaler: Reduce la influencia del valor atípico utilizando la mediana y el IQR. Los datos se escalan de manera que los valores centrales mantienen su variabilidad relativa.
Para visualizar estas diferencias, se pueden trazar los datos escalados con gráficos de cajas:
# Gráficos de los datos escalados
fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))
# MinMaxScaler
axs[0].boxplot(X_minmax)
axs[0].set_title('MinMaxScaler')
# StandardScaler
axs[1].boxplot(X_standard)
axs[1].set_title('StandardScaler')
# RobustScaler
axs[2].boxplot(X_robust)
axs[2].set_title('RobustScaler')
plt.tight_layout()
plt.show()
Estos gráficos evidencian cómo el RobustScaler maneja mejor los valores atípicos, manteniendo una distribución más equilibrada de los datos centrales. En contraste, el MinMaxScaler y el StandardScaler muestran una distorsión significativa debido al valor atípico.
La elección del método de escalado debe basarse en las características del conjunto de datos y en los requisitos del algoritmo de aprendizaje. Algunos algoritmos, como los k-vecinos más cercanos o los algoritmos de clustering, son sensibles a la escala y pueden verse afectados por la presencia de outliers. En tales casos, el uso de RobustScaler puede mejorar el rendimiento.
Por otro lado, si el conjunto de datos no contiene valores atípicos significativos y se desea mantener las proporciones originales de las características, el MinMaxScaler es una buena opción. Este escalador es especialmente útil en técnicas de aprendizaje profundo donde las funciones de activación pueden ser sensibles a la escala de los datos de entrada.
El StandardScaler es apropiado cuando se asume que los datos siguen una distribución normal y se desea centrar las características en cero con desviación estándar unitaria. Esto es común en modelos lineales como la regresión logística o las máquinas de soporte vectorial.
Es importante integrar el escalado dentro de un Pipeline para asegurar que el preprocesamiento se aplique de manera consistente tanto en el conjunto de entrenamiento como en el de prueba:
from sklearn.pipeline import Pipeline
from sklearn.neighbors import KNeighborsClassifier
# Creación del pipeline con RobustScaler y KNeighborsClassifier
pipeline = Pipeline([
('scaler', RobustScaler()),
('classifier', KNeighborsClassifier())
], memory = None)
# Etiquetas de ejemplo
y = np.array([0, 0, 0, 1, 1, 1])
# Entrenamiento del modelo
pipeline.fit(X, y)
# Predicción
y_pred = pipeline.predict(X)
print("Predicciones:", y_pred)
En este ejemplo, al utilizar el RobustScaler dentro del pipeline, se mejora la precisión del modelo al minimizar el impacto de los valores atípicos.
Otra consideración al comparar los métodos de escalado es el tiempo de cálculo. El RobustScaler puede requerir más tiempo computacional debido al cálculo de la mediana y los cuantiles, especialmente en conjuntos de datos muy grandes. Sin embargo, este aumento en el tiempo puede estar justificado si mejora la calidad del escalado y, por ende, el rendimiento del modelo.
Finalmente, es esencial recordar que el escalado debe ajustarse únicamente con el conjunto de entrenamiento. Aplicar el método de escalado después de haber visto el conjunto de prueba puede introducir fugas de información y sobreestimar el rendimiento del modelo.
La elección entre MinMaxScaler, StandardScaler y RobustScaler depende de la naturaleza de los datos y del modelo a emplear. Analizar la presencia de valores atípicos y la distribución de las características permite seleccionar el escalador más adecuado para optimizar el proceso de aprendizaje automático.
Ejercicios de esta lección Escalado de datos
Evalúa tus conocimientos de esta lección Escalado de datos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Todas las lecciones de ScikitLearn
Accede a todas las lecciones de ScikitLearn y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Aprendizaje Automático
Introducción Y Entorno
Introducción E Instalación
Introducción Y Entorno
Introducción Al Preprocesamiento De Datos
Preprocesamiento De Datos
Identificación Y Tratamiento De Valores Faltantes
Preprocesamiento De Datos
Escalado De Datos
Preprocesamiento De Datos
Normalización De Datos
Preprocesamiento De Datos
Codificación De Variables Categóricas
Preprocesamiento De Datos
Ingeniería De Características
Preprocesamiento De Datos
Selección De Características
Preprocesamiento De Datos
Extracción De Características
Preprocesamiento De Datos
Particionamiento De Datos
Preprocesamiento De Datos
Preprocesamiento De Datos Desbalanceados
Preprocesamiento De Datos
Introducción A La Regresión
Regresión
Regresión Lineal
Regresión
Regresión Knn Kneighborsregressor
Regresión
Regresión Svm Con Svr
Regresión
Regresión Con Árboles Decisiontreeregressor
Regresión
Regresión Con Algoritmos De Conjunto
Regresión
Introducción A La Clasificación
Clasificación
Clasificación Con Regresión Logística
Clasificación
Clasificación Knn Kneighborsclassifier
Clasificación
Clasificación Svm Con Svc
Clasificación
Clasificación Con Árboles Decisiontreeclassifier
Clasificación
Clasificación Con Algoritmos De Conjunto
Clasificación
Reducción De La Dimensionalidad Con Pca
Aprendizaje No Supervisado
Clustering Con Kmeans
Aprendizaje No Supervisado
Clustering Jerárquico
Aprendizaje No Supervisado
Clustering De Densidad Con Dbscan
Aprendizaje No Supervisado
Preprocesamiento De Textos Para Nlp
Nlp
Representación De Texto Y Extracción De Características
Nlp
Clasificación De Texto Con Scikit Learn
Nlp
Análisis De Sentimiento
Nlp
Técnicas Avanzadas De Extracción De Características
Nlp
Introducción Al Análisis De Series Temporales
Series Temporales
Preprocesamiento De Datos De Series Temporales
Series Temporales
Ingeniería De Características Para Series Temporales
Series Temporales
Transformación Y Escalado De Series Temporales
Series Temporales
Validación Y Evaluación De Modelos En Series Temporales
Series Temporales
Validación Y Evaluación De Modelos
Validación De Modelos
Técnicas De Validación Cruzada
Validación De Modelos
Métricas De Regresión
Validación De Modelos
Métricas De Clasificación
Validación De Modelos
Ajuste De Hiperparámetros
Validación De Modelos
Introducción A Pipelines
Pipelines Y Despliegue
Creación De Pipelines Básicos
Pipelines Y Despliegue
Preprocesamiento De Datos Con Pipelines
Pipelines Y Despliegue
Pipelines Y Validación Cruzada
Pipelines Y Despliegue
Pipelines Con Columntransformer
Pipelines Y Despliegue
Exportar E Importar Pipelines
Pipelines Y Despliegue
Objetivos de aprendizaje de esta lección
- Comprender las diferencias entre escalado, estandarización y normalización de datos.
- Aplicar MinMaxScaler para reescalar características dentro de un rango específico.
- Utilizar StandardScaler para estandarizar datos con media cero y desviación estándar unitaria.
- Emplear RobustScaler para manejar valores atípicos mediante estadísticas robustas.
- Identificar cuándo utilizar cada método de escalado según las características del conjunto de datos.
- Implementar el escalado de datos dentro de un Pipeline de Scikit-Learn.
- Evaluar el impacto del escalado en el rendimiento de algoritmos de aprendizaje automático.