MaxAbsScaler

Nombre completo
sklearn.preprocessing.MaxAbsScaler
Librería
scikit-learn
Sintaxis

sklearn.preprocessing.MaxAbsScaler(copy=True)

Descripción

La función sklearn.preprocessing.MaxAbsScaler escala y traslada cada característica del array de entrada de forma que el valor absoluto máximo de cada una sea 1.0 (es decir, todas las características pasan a tener valores en el rango [-1, 1]).

El array de entrada debe ser de números reales (enteros o de tipo float). No se aceptan números complejos.

    Parámetros
    • copy: (True por defecto) booleano. Si toma el valor False y el array de entrada es un array NumPy, la transformación se realiza inplace.

     

    Atributos:

    • scale_: (array) escalado relativo de cada característica
    • max_abs_: (array) máximo valor de cada característica
    • n_samples_seen_: (entero), número de muestras (filas) procesadas.
    Resultado

    El resultado de los métodos fit_transform y transform es siempre un array NumPy de tipo float.

    Ejemplos

    Comenzamos importando las librerías involucradas y creando el dataframe que queremos escalar:

    import pandas as pd
    import numpy as np
    from sklearn.preprocessing import MaxAbsScaler

    df = pd.DataFrame({
        "w": [5, 2, -100],
        "x": [2, 10, -2],
        "y": [100, 0, -10],
        "z": [0.5, 0.1, -0.1],
    })
    df

    DataFrame a escalar

    Instanciamos el escalador, lo entrenamos con el dataframe y lo transformamos:

    scaler = MaxAbsScaler()
    scaler.fit_transform(df)

    MaxAbsScaler

    Observamos que los valores máximos y mínimos en todas las características son 1 y -1. El procedimiento seguido por el escalador ha sido comprobar el valor máximo absoluto de cada característica y dividir todas los valores (de cada característica) por su máximo absoluto. Podemos comprobar los valores máximos encontrados visualizando el valor del atributo max_abs_:

    scaler.max_abs_

    array([100. , 10. , 100. , 0.5])

    La escala aplicada (cifra por la que dividir los valores de cada característica) viene dada por el atributo scale_ (la escala debe coincidir con el valor máximo encontrado):

    scaler.scale_

    array([100. , 10. , 100. , 0.5])

    Por último, el atributo n_samples_seen_ devuelve el número de muestras (filas de datos) procesadas:

    scaler.n_samples_seen_

    3

    ¿Y cómo se gestionan los valores nulos? Hagamos la prueba:

    df = pd.DataFrame({
        "w": [5, np.nan, -100],
        "x": [2, 10, -2],
        "y": [np.nan, 0, -10],
        "z": [0.5, 0.1, -0.1],
    })
    df

    DataFrame a escalar

    scaler.fit_transform(df)

    MaxAbsScaler

    Veamos los valores máximos encontrados:

    scaler.max_abs_

    array([100. , 10. , 10. , 0.5])

    Comprobamos que los valores nulos se ignoran durante el entrenamiento y se mantienen durante la transformación.

    ¿Y si todos los valores de una característica son nulos?

    df = pd.DataFrame({
        "w": [5, np.nan, -100],
        "x": [2, 10, -2],
        "y": [np.nan, np.nan, np.nan],
        "z": [0.5, 0.1, -0.1],
    })
    df

    DataFrame a escalar

    scaler.fit_transform(df)

    C:\Users\xxx\Anaconda3\lib\site-packages\sklearn\preprocessing\data.py:923: RuntimeWarning: All-NaN slice encountered max_abs = np.nanmax(np.abs(X), axis=0)
    MaxAbsScaler

    Vemos que, a pesar del error que devuelve, el resultado es correcto.

    Enviado por admin el Lun, 08/04/2019 - 22:10