Cómo reescalar números entre diferentes rangos

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En el mundo de la programación en Python, la reescalado de números es una técnica crucial para transformar datos numéricos en diferentes rangos. Este tutorial explora varios métodos para reescalar números de manera efectiva, brindando a los desarrolladores y científicos de datos estrategias prácticas para normalizar y ajustar valores numéricos para diversas aplicaciones en aprendizaje automático (machine learning), análisis de datos y computación científica.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python/BasicConceptsGroup -.-> python/numeric_types("Numeric Types") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/PythonStandardLibraryGroup -.-> python/math_random("Math and Random") python/DataScienceandMachineLearningGroup -.-> python/data_analysis("Data Analysis") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills python/numeric_types -.-> lab-436793{{"Cómo reescalar números entre diferentes rangos"}} python/lists -.-> lab-436793{{"Cómo reescalar números entre diferentes rangos"}} python/function_definition -.-> lab-436793{{"Cómo reescalar números entre diferentes rangos"}} python/arguments_return -.-> lab-436793{{"Cómo reescalar números entre diferentes rangos"}} python/math_random -.-> lab-436793{{"Cómo reescalar números entre diferentes rangos"}} python/data_analysis -.-> lab-436793{{"Cómo reescalar números entre diferentes rangos"}} python/data_visualization -.-> lab-436793{{"Cómo reescalar números entre diferentes rangos"}} end

Conceptos básicos del reescalado de números

¿Qué es el reescalado de números?

El reescalado de números es una técnica fundamental de transformación de datos que mapea valores de un rango a otro. Ayuda a normalizar o estandarizar datos numéricos, haciéndolos más adecuados para diversas tareas de computación y aprendizaje automático (machine learning).

Conceptos clave

Transformación de rangos

El reescalado implica convertir números de su rango original a un nuevo rango objetivo mientras se preservan sus proporciones relativas. Este proceso asegura que los datos mantengan sus relaciones originales pero se ajusten a una escala diferente.

graph LR A[Original Range] --> B[Rescaled Range] A --> |Transformation| B

Escenarios comunes de reescalado

Escenario Rango original Rango objetivo Caso de uso
Normalización 0-100 0-1 Aprendizaje automático (Machine Learning)
Estandarización Varios Media 0, Desviación estándar 1 Análisis estadístico
Escalado de características Diferentes escalas Escala uniforme Preprocesamiento de datos

¿Por qué reescalar números?

  1. Mejorar el rendimiento del algoritmo: Muchos algoritmos de aprendizaje automático funcionan mejor con datos escalados.
  2. Prevenir sesgos: Evitar que las características con rangos más grandes dominen los cálculos.
  3. Mejorar la visualización: Hacer que los datos sean más comparables e interpretables.

Fórmula básica de reescalado

La fórmula fundamental de reescalado es:

X_scaled = ((X - X_min) / (X_max - X_min)) * (new_max - new_min) + new_min

Donde:

  • X es el valor original.
  • X_min y X_max son los límites del rango original.
  • new_min y new_max son los límites del rango objetivo.

Ejemplo simple en Python

def rescale_number(value, original_min, original_max, new_min, new_max):
    """
    Rescale a number from one range to another
    """
    return ((value - original_min) / (original_max - original_min)) * \
           (new_max - new_min) + new_min

## Example usage
original_value = 50
rescaled_value = rescale_number(original_value, 0, 100, 0, 1)
print(f"Rescaled value: {rescaled_value}")

Consideraciones prácticas

  • Siempre manejar casos extremos como la división por cero.
  • Considerar las propiedades estadísticas de tus datos.
  • Elegir métodos de escalado adecuados según tu caso de uso específico.

Al entender estos conceptos básicos, estarás bien preparado para aplicar técnicas de reescalado de números de manera efectiva en tus proyectos de procesamiento de datos y aprendizaje automático con LabEx.

Métodos de reescalado en Python

Descripción general de las técnicas de reescalado

Python ofrece múltiples métodos potentes para reescalar números, cada uno adecuado para diferentes escenarios y características de los datos.

1. Reescalado manual

Función personalizada básica

def manual_rescale(value, original_min, original_max, new_min, new_max):
    return ((value - original_min) / (original_max - original_min)) * \
           (new_max - new_min) + new_min

## Example
original_data = [10, 20, 30, 40, 50]
rescaled_data = [manual_rescale(x, 10, 50, 0, 1) for x in original_data]

2. Métodos de reescalado de NumPy

Escalado MinMax

import numpy as np

def numpy_minmax_scale(data, feature_range=(0, 1)):
    min_val = np.min(data)
    max_val = np.max(data)
    scaled_data = (data - min_val) / (max_val - min_val)
    scaled_data = scaled_data * (feature_range[1] - feature_range[0]) + feature_range[0]
    return scaled_data

## Usage
data = np.array([10, 20, 30, 40, 50])
scaled_data = numpy_minmax_scale(data)

Escalado estándar (Normalización Z-Score)

def standard_scale(data):
    mean = np.mean(data)
    std = np.std(data)
    return (data - mean) / std

## Example
standardized_data = standard_scale(data)

3. Reescalado con Scikit-learn

Escaladores de preprocesamiento

from sklearn.preprocessing import MinMaxScaler, StandardScaler

## MinMax Scaler
minmax_scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = minmax_scaler.fit_transform(data.reshape(-1, 1))

## Standard Scaler
standard_scaler = StandardScaler()
standardized_data = standard_scaler.fit_transform(data.reshape(-1, 1))

Comparación de métodos de reescalado

Método Rango Preserva el cero Maneja valores atípicos (outliers) Caso de uso típico
MinMax 0-1 No Redes neuronales (Neural Networks)
Estándar Media 0, Desviación estándar 1 No SVM, Regresión logística
Robusto Basado en la mediana Datos con muchos valores atípicos

4. Reescalado robusto

from sklearn.preprocessing import RobustScaler

robust_scaler = RobustScaler()
robust_scaled_data = robust_scaler.fit_transform(data.reshape(-1, 1))

Visualización de los métodos de reescalado

graph TD A[Original Data] --> B[MinMax Scaling] A --> C[Standard Scaling] A --> D[Robust Scaling] B --> E[Bounded Range 0-1] C --> F[Zero Mean, Unit Variance] D --> G[Median-Centered, Less Sensitive to Outliers]

Mejores prácticas

  1. Elegir el método de reescalado en función de la distribución de los datos.
  2. Aplicar el reescalado antes del entrenamiento del modelo.
  3. Utilizar el mismo escalador para los datos de entrenamiento y prueba.
  4. Considerar las características de los datos.

Al dominar estas técnicas de reescalado con LabEx, mejorarás tus habilidades de preprocesamiento de datos y el rendimiento de los modelos de aprendizaje automático.

Casos de reescalado en el mundo real

1. Análisis de datos financieros

Normalización de precios de acciones

import numpy as np
import pandas as pd

def normalize_stock_prices(prices):
    return (prices - prices.min()) / (prices.max() - prices.min())

stock_prices = np.array([50, 55, 60, 52, 58])
normalized_prices = normalize_stock_prices(stock_prices)

2. Preparación de características para el aprendizaje automático

Preparación de características para redes neuronales

from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

def prepare_ml_features(X):
    scaler = MinMaxScaler()
    X_scaled = scaler.fit_transform(X)
    return X_scaled, scaler

## Example dataset preparation
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
X_train_scaled, scaler = prepare_ml_features(X_train)
X_test_scaled = scaler.transform(X_test)

3. Procesamiento de imágenes

Normalización de canales de color

import numpy as np

def normalize_image_channels(image):
    return (image - image.min()) / (image.max() - image.min())

## RGB image normalization
rgb_image = np.random.randint(0, 256, (100, 100, 3))
normalized_image = np.apply_along_axis(normalize_image_channels, 2, rgb_image)

4. Procesamiento de datos de sensores

Calibración de lecturas de sensores IoT

def calibrate_sensor_readings(readings, min_val, max_val):
    return [(reading - min_val) / (max_val - min_val) * 100
            for reading in readings]

temperature_readings = [18.5, 20.3, 22.1, 19.7]
calibrated_readings = calibrate_sensor_readings(
    temperature_readings,
    min(temperature_readings),
    max(temperature_readings)
)

Comparación de métodos de reescalado

Caso de uso Método de reescalado Beneficio clave
Redes neuronales Escalado MinMax Entrada acotada
Regresión lineal Escalado estándar Media cero
Detección de anomalías Escalado robusto Resistencia a valores atípicos

5. Normalización de series temporales

Preparación de series temporales para la predicción

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

def prepare_time_series(series):
    scaler = MinMaxScaler()
    scaled_series = scaler.fit_transform(series.values.reshape(-1, 1))
    return scaled_series, scaler

## Example time series scaling
time_series_data = pd.Series([100, 120, 110, 130, 125])
scaled_series, scaler = prepare_time_series(time_series_data)

Visualización del flujo de trabajo de reescalado

graph TD A[Raw Data] --> B[Identify Scaling Needs] B --> C{Select Scaling Method} C -->|Neural Network| D[MinMax Scaling] C -->|Statistical Analysis| E[Standard Scaling] C -->|Outlier-rich Data| F[Robust Scaling] D --> G[Scaled Data Ready for Processing] E --> G F --> G

Mejores prácticas para el reescalado en el mundo real

  1. Siempre entender las características de tus datos.
  2. Elegir el método de reescalado en función del caso de uso específico.
  3. Mantener un reescalado consistente en los conjuntos de datos de entrenamiento y prueba.
  4. Preservar las relaciones originales de los datos.
  5. Manejar casos extremos y valores atípicos potenciales.

Al dominar estas técnicas de reescalado en el mundo real con LabEx, estarás capacitado para enfrentar diversos desafíos de preprocesamiento de datos en múltiples dominios.

Resumen

Al dominar las técnicas de reescalado de números en Python, los desarrolladores pueden transformar eficientemente los datos numéricos, asegurando valores consistentes y comparables en diferentes rangos. El tutorial ha cubierto métodos esenciales, implementaciones prácticas y escenarios del mundo real, lo que permite a los programadores de Python enfrentar los desafíos complejos de transformación de datos con confianza y precisión.