Ingeniería de funciones: normalización y estandarización

Debido a las diferentes fuentes y unidades de medida de las características de la muestra, sus escalas (Escala) o el rango de valores pueden variar mucho. Si un algoritmo de aprendizaje automático no afecta su aprendizaje y predicción después de escalar todas o parte de las funciones, decimos que el algoritmo tiene invariancia de escala (Scale Invariance). Teóricamente, la red neuronal debería tener invariancia de escala y puede adaptarse a la escala de diferentes características ajustando los parámetros. Sin embargo, las características de entrada con diferentes escalas aumentarán la dificultad del entrenamiento. 1

1/ Normalización mínima y máxima

El método de normalización generalmente se refiere al método de convertir características de datos a la misma escala. Min -Max Normalization (Normalización Min-Max) es el método de normalización más simple, que normaliza el rango de valores de cada característica a [0, 1] [0,1] a través de una escala simple[ 0 ,1 ] o[ − 1 , 1 ] [-1, 1][ - 1 ,1 ] Si los datos de muestra{ x ( n ) } n = 1 N \{\boldsymbol{x}^{(n)}\}^N_{n=1}{ x( n ) }norte = 1norte, min y max normalizados a [ 0 , 1 ] [0,1][ 0 ,1 ] fórmula:
x ^ ( norte ) = x ( norte ) − min ⁡ ( x ( norte ) ) max ⁡ norte ( x ( norte ) ) − min ⁡ norte ( x ( norte ) ) , \hat{x} ^{ (n)}=\frac{x^{(n)}-\min{(x^{(n)})}}{\max_n(x^{(n)})-\min_n(x^ {( norte)})},X^( n )=máximon( X( norte ) )minn( X( norte ) )X( n )min( X( n ) ),
el mínimo y el máximo se normalizan a[ − 1 , 1 ] [-1,1][ - 1 ,1 ] , primero puede normalizar los datos a[ 0 , 1 ] [0, 1][ 0 ,1 ] , y luego panorámica y zoom:
x ^ ( n ) = 2 max n ( x ( n ) ) − min n ( x ( n ) ) ( x ( n ) − min n ( x ( n ) ) ) − 1 , \hat{x}^{(n)}=\frac{2}{\text{máx}_n(x^{(n)})-\text{mín}_n(x^{(n) }) }\left(x^{(n)}-\text{min}_n(x^{(n)})\right)-1,X^( n )=máximon( X( norte ) )minn( X( norte ) )2( X( n )minn( X( norte ) ))1 ,

Por lo tanto, normalice los datos a un cierto rango [r 1, r 2] [r_1, r_2] usando min y max[ r1,r2] está codificado como:

import torch
import numpy as np
from sklearn import preprocessing
np.random.seed(9) # 设置随机种子为 9

def min_max_norm(X, feature_range=(0, 1)):
    r1, r2 = feature_range  # 将数据归一化到 [r1, r2] 之间
    xmin, xmax = X.min(axis=0), X.max(axis=0) # 得到数据的最大最小值
    X_std = (X - xmin) / (xmax - xmin)     # 标准化到 [0, 1]
    X_scaled = X_std * (r2 - r1) + r1      # 数据平移缩放到 [r1, r2]
    return X_scaled

Comparar con sklearn.preprocessingen :MinMaxScaler()

sample_size = 5
X = np.random.randn(sample_size) * 255
X = X.reshape(-1, 1)
min_max_norm(X, feature_range=(0, 1))    # 数据归一化到 [0, 1] 之间
preprocessing.MinMaxScaler(feature_range=(0, 1)).fit_transform(X.reshape(-1, 1))
# array([1.        , 0.73983247, 0.        , 0.98747617, 0.66033068])

min_max_norm(X, feature_range=(-1, 1))   # 数据归一化到 [-1, 1] 之间
preprocessing.MinMaxScaler(feature_range=(-1, 1)).fit_transform(X.reshape(-1, 1))
# array([ 1.        ,  0.47966494, -1.        ,  0.97495233,  0.32066137])

# 两种方法得到的结果是一样的

2/ Estandarización

La estandarización (Standardization) también se llama Normalización de puntaje Z (Z-Score Normalization) Su función es ajustar cada característica de dimensión para tener una media de 0 y una varianza de 1. Primero calcule la media y la varianza: μ = 1
N ∑ norte = 1 norte X ( norte ) σ 2 = 1 norte ∑ norte = 1 norte ( X ( norte ) − μ ) 2 \begin{alineado} \mu &=\frac{1}{N} \sum_{n=1 } ^{N} x^{(n)} \\ \sigma^{2} &=\frac{1}{N} \sum_{n=1}^{N}\left(x^{(n) } -\mu\right)^{2} \end{alineado}metropag2=norte1norte = 1norteX( n )=norte1norte = 1norte( X( n )m )2
Luego característica x ( n ) x^{(n)}X( n ) Resta la media y divide por la desviación estándar para obtener el nuevo valor propiox ^ ( n ) \hat{x}^{(n)}X^( norte ) :
x ^ ( norte ) = x ( norte ) − μ σ \hat{x}^{(n)}=\frac{x^{(n)}-\mu}{\sigma}X^( n )=pagX( n )metro
Desviación estándar σ \sigmaσ no puede ser cero, de lo contrario significa que las características de esta dimensión no son distinguibles y se pueden eliminar directamente.

Código estandarizado:

def z_score_norm(X):
    mu = X.mean()   # 计算数据的均值
    sigma = X.std() # 计算数据的标准差(方差的平方根)
    return (X - mu) / sigma

z_score_norm(X)
preprocessing.StandardScaler().fit_transform(X)
# array([ 0.88537948,  0.17106352, -1.86022047,  0.85099404, -0.04721657])

3/ El papel de la normalización y estandarización 2

La esencia de la normalización y la estandarización es en realidad una transformación lineal, es decir, se puede considerar como una relación de α \alpha a los datosCompresión de α y luego traducción deβ \betaunidades β . Una buena propiedad que tienen los cambios lineales es que no cambian el orden numérico de los datos originales.

La normalización consiste en escalar directamente los datos en un intervalo, que es relativamente "difícil", y solo está relacionado con los valores máximo y mínimo de los datos. La estandarización es más "suave", y su escala está relacionada con cada punto, lo que se refleja en la Varianza.

De la fórmula, cuando los datos están concentrados, α \alphaα es más pequeño, los datos están más dispersos después de la normalización y los datos originales están ampliamente distribuidos, entoncesα \ alphaSi α es relativamente grande, los datos se concentrarán en un rango más pequeño después de la normalización.

Entonces, ¿cuándo usar la normalización y cuándo usar la estandarización?

  • Si existe un requisito para el rango de resultados de salida, utilice la normalización;
  • Los datos son relativamente estables, no hay valores máximos y mínimos extremos, y se utiliza la normalización;
  • Hay valores atípicos o demasiado ruido en los datos, use la estandarización;

Por supuesto, no hay un indicador claro para usar la normalización y la estandarización. Puede probar ambos métodos y elegir el que funcione mejor.


  1. Qiu Xipeng: "Red neuronal y aprendizaje profundo" ; ↩︎

  2. Conozca la respuesta: ¿Cuál es el papel de la "normalización" en la ingeniería de características? — ajuste fino ; ↩︎

Guess you like

Origin blog.csdn.net/weixin_39679367/article/details/122766008