Procesamiento y Escalamiento de Datos Numéricos en Python
Clase 16 de 25 • Curso de Matemáticas para Data Science: Estadística Descriptiva
Resumen
¿Cómo procesar datos numéricos en Python utilizando escalamiento?
El procesamiento de datos numéricos en Python es crucial para mejorar la eficacia de los modelos de aprendizaje automático. El uso adecuado de técnicas de escalamiento puede facilitar la convergencia de algoritmos, lo que aumenta la eficiencia y precisión de los modelos. En esta sección, exploraremos cómo implementar algunas de las técnicas de escalamiento en Python.
¿Qué librerías y herramientas se utilizan?
Antes de iniciar, es necesario configurar el entorno de desarrollo con las herramientas adecuadas. Esto incluye:
- DeepNote: Para trabajar en un notebook interactivo.
- Librerías de Python: Se utilizan
numpy
,matplotlib
, yscikit-learn
. - TimeIT: Medir el rendimiento de los modelos.
Ejemplo de código para importar las librerías necesarias:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model
import timeit
¿Cómo aplicar la regla de escalamiento máximo-mínimo?
El escalamiento máximo-mínimo se utiliza para normalizar los datos dentro de un rango específico. Esta transformación ayuda a que los algoritmos de aprendizaje automático converjan más rápido. A continuación se presentan los pasos básicos para aplicar este método:
- Calcular el máximo y mínimo de los datos crudos:
max_raw = np.max(raw_data)
min_raw = np.min(raw_data)
- Escalar los datos con la fórmula especificada:
scaled_data = (2 * (raw_data - min_raw) / (max_raw - min_raw)) - 1
- Visualizar los datos originales y escalados:
Utilizar matplotlib
para graficar los histogramas y comparar las distribuciones:
fig, axs = plt.subplots(2, sharex=True)
axs[0].hist(raw_data, bins=30)
axs[1].hist(scaled_data, bins=30)
plt.show()
¿Cómo medir el tiempo de ejecución de los modelos?
Medir el tiempo de ejecución es vital para evaluar el rendimiento de los modelos ajustados a diferentes datos. Utilizamos la librería timeit
para este propósito:
- Definir funciones para entrenar el modelo:
def train_raw():
model = linear_model.LinearRegression()
model.fit(raw_data, target)
def train_scaled():
model = linear_model.LinearRegression()
model.fit(scaled_data, target)
- Calcular y comparar el tiempo de entrenamiento:
raw_time = timeit.timeit(train_raw, number=100)
scaled_time = timeit.timeit(train_scaled, number=100)
print(f"Tiempos de entrenamiento: Raw: {raw_time}, Scaled: {scaled_time}")
¿Cómo aplicar la normalización z y cuándo utilizarla?
La normalización z transforma los datos restando el promedio y dividiendo por la desviación estándar. Es recomendable para datos con distribución aproximadamente normal.
- Aplicar normalización:
mean_raw = np.mean(raw_data)
std_raw = np.std(raw_data)
normalized_data = (raw_data - mean_raw) / std_raw
- Visualizar resultados:
Crear histogramas para visualizar la normalización z:
fig, axs = plt.subplots(2, sharex=True)
axs[0].hist(raw_data, bins=30)
axs[1].hist(normalized_data, bins=30)
plt.show()
¿Cómo manejar transformaciones no lineales?
Cuando los datos están fuertemente sesgados, las transformaciones no lineales pueden ser efectivas para rediseñar las distribuciones:
¿Qué es la transformación Tangente Hiperbólica?
La tangente hiperbólica es una función utilizada para redistribuir datos de manera más uniforme:
- Aplicar sobre datos sesgados:
price_data = pd.read_csv('car_prices.csv')['Price']
price_transformed = price_data.apply(lambda x: np.tanh(x/10000))
- Visualizar la transformación:
Generar el histograma del resultado:
plt.hist(price_transformed, bins=30)
plt.show()
Estas herramientas y técnicas son esenciales para cualquier científica de datos que desea mejorar la efectividad de los modelos de aprendizaje automático. El dominio profundo de estos conceptos proporciona una base sólida para abordar problemas más complejos de procesamiento de datos numéricos. Recuerda explorar la extensa documentación de scikit-learn
para seguir ampliando tus conocimientos y habilidades. ¡Sigue aprendiendo y experimentando con estos emocionantes conceptos!