Explicar de una manera fácil de entender: normalización del preprocesamiento de datos (con código Python)

Preguntas y respuestas técnicas

Este artículo proviene del intercambio de amigos del grupo técnico, si desea unirse, siga los pasos a continuación.

En la actualidad, se ha abierto un grupo de intercambio técnico y el grupo tiene más de 3000 personas. La mejor manera de comentar al agregar es: fuente + dirección de interés, que es conveniente para encontrar amigos de ideas afines.

Método ①, agregar ID de WeChat: dkl88191, comentarios: de CSDN + intercambio técnico
Método ②, número público de búsqueda de WeChat: aprendizaje de Python y extracción de datos, respuesta en segundo plano: agregar grupo + CSDN

1. ¿Por qué hacer preprocesamiento de datos?

  • Cualquier gran cantidad de datos recopilados a menudo es imposible de usar inmediatamente después de obtenerlos. Por ejemplo, algunos datos con valores grandes tienen una alta complejidad computacional, no son fáciles de converger y son difíciles de realizar procesamiento estadístico.

  • Los datos no se ajustan a la distribución normal y no se pueden realizar algunos análisis matemáticos que se ajustan a la distribución normal.

Entonces, para hacer un mejor uso de los datos, necesitamos estandarizarlos.

2. Estandarización de datos

El procesamiento adimensional de datos resuelve principalmente la comparabilidad de los datos. Hay muchos métodos de normalización de datos, los más utilizados son "normalización mínimo-máximo", "normalización de puntuación Z" y "normalización de escala decimal".

Después del proceso de estandarización anterior, los datos originales se convierten en valores de evaluación de índice adimensionales, es decir, cada valor de índice tiene el mismo nivel de magnitud y se puede llevar a cabo una evaluación y un análisis exhaustivos. Aquí nos enfocamos en el procesamiento de normalización de datos más utilizado, que consiste en asignar uniformemente los datos al intervalo [0,1].

1. Metas normalizadas

1. La conversión de los datos a decimales en el intervalo (0,1) se propone principalmente por la conveniencia del procesamiento de datos.Es más conveniente y rápido asignar los datos al rango de 0 a 1 para el procesamiento.

2. Cambie la expresión dimensional a una expresión adimensional para resolver la comparabilidad de los datos.

2. Las ventajas de la normalización

1. Después de la normalización, la velocidad de descenso de gradiente para encontrar la solución óptima se acelera. Si el modelo de aprendizaje automático utiliza el método de descenso de gradiente para encontrar la solución óptima, la normalización suele ser muy necesaria, de lo contrario, será difícil converger o incluso no será posible. para converger.

2. La normalización tiene el potencial de mejorar la precisión, algunos clasificadores necesitan calcular la distancia entre muestras (como la distancia euclidiana), como KNN. Si el rango de un rango de características es muy grande, el cálculo de la distancia depende principalmente de esta característica, lo que es contrario a la situación real (por ejemplo, la situación real es que la característica con un rango de rango pequeño es más importante).

3. Qué algoritmos no requieren normalización

Los modelos probabilísticos (modelos de árbol) no necesitan normalización porque no les importa el valor de la variable, sino la distribución de la variable y la probabilidad condicional entre las variables, como los árboles de decisión, RF. Y los problemas de optimización como Adaboost, SVM, LR, Knn, KMeans requieren normalización.

Tres, método de normalización de datos.

1.min-max normalización

Al recorrer cada dato en el vector de características, se registran Max y Min, y los datos se normalizan utilizando Max-Min como base (es decir, Min=0, Max=1): donde Max es el valor máximo del valor de datos de muestra , Min es el valor mínimo de los datos de muestra.

def MaxMinNormalization(x,Max,Min):
 
    x = (x - Min) / (Max - Min);
 
    return x;

Use np.max() y np.min() en numpy para encontrar los valores máximo y mínimo. Este método de normalización es más adecuado para el caso de comparación numérica. Este método tiene un defecto.Si max y min son inestables, es fácil hacer que el resultado de la normalización sea inestable, y el efecto de uso posterior también es inestable. En el uso real, max y min pueden reemplazarse por valores empíricos constantes.

pd: el método de normalización de los datos al rango de intervalo [a,b]:

(1) Primero encuentre el valor mínimo Min y el valor máximo Max de los datos de la muestra original X
(2) Calcule el coeficiente: k=(ba)/(Max-Min)
(3) Obtenga los datos normalizados a [a, b] intervalo: Y=a+k(X-Min) o Y=b+k(X-Max)

2. Normalización de puntuación Z

El método de estandarización más común es la estandarización Z, que también es el método de estandarización más utilizado en SPSS. El método de estandarización predeterminado de spss es la estandarización de puntuación z.

También llamado estandarización de la desviación estándar, este método proporciona la media y la desviación estándar de los datos originales para estandarizar los datos.

def  Z_ScoreNormalization(x,mu,sigma):
 
    x = (x - mu) / sigma;
 
    return x;

Las funciones mean y std en numpy y el método StandardScaler proporcionado por sklearn pueden obtener la media y la desviación estándar. El valor de la variable estandarizada fluctúa alrededor de 0, más de 0 significa por encima del promedio y menos de 0 significa por debajo del promedio.

Lo siguiente usa numpy para lograr la estandarización de la desviación estándar de una matriz

importar numpy como np

x_np = np.matriz([[1.5, -1., 2.],
[2., 0., 0.]])
media = np.media(x_np, eje=0)
std = np.std(x_np, axis=0)
print('El valor inicial de la matriz es: {}'.format(x_np))
print('El valor medio de la matriz es: {}\n La desviación estándar de la matriz es: {}' .format(mean,std ))
another_trans_data = x_np - mean
another_trans_data = another_trans_data / std
print('La matriz normalizada de desviación estándar es: {}'.format(another_trans_data))

El valor inicial de la matriz es: [[ 1.5 -1. 2. ]
[ 2. 0. 0. ]]
El valor medio de la matriz es: [ 1.75 -0.5 1. ]
La desviación estándar de la matriz es: [ 0.25 0.5 1. ]
Estándar La matriz normalizada de diferencias es: [[-1. -1. 1.]
[ 1. 1. -1.]]

El método StandardScaler proporcionado por sklearn se usa a continuación

from sklearn.preprocessing import StandardScaler # Herramienta de estandarización
import numpy as np

x_np = np.array([[1.5, -1., 2.],
[2., 0., 0.]])
scaler = StandardScaler()
x_train = scaler.fit_transform(x_np)
print('El valor inicial de la matriz es :{}'.format(x_np))
print('La media de esta matriz es: {}\n La desviación estándar de esta matriz es: {}'.format(scaler.mean_,np.sqrt(scaler .var_)))
print('La matriz estandarizada de desviación estándar es: {}'.format(x_train))

El valor inicial de la matriz es: [[ 1.5 -1. 2. ]
[ 2. 0. 0. ]]
El valor medio de la matriz es: [ 1.75 -0.5 1. ]
La desviación estándar de la matriz es: [ 0.25 0.5 1. ]
Estándar La matriz normalizada de diferencias es: [[-1. -1. 1.]
[ 1. 1. -1.]]

Para encontrar que la herramienta de estandarización de sklearn tendrá dos atributos después de la creación de instancias, uno es mean_ (media) y otro es var_ (varianza). El resultado final es el mismo que usar numpy.

¿Por qué la desviación estándar de los datos normalizados de puntuación z es 1?

x-μ solo cambia la media, la desviación estándar no cambia, por lo que la media se convierte en 0; (x-μ)/σ simplemente divide la desviación estándar por σ veces, por lo que la desviación estándar se convierte en 1.

3. Función sigmoide:

La función sigmoidea es una función con una curva en forma de S y es una buena función de umbral. Es centralmente simétrica en (0, 0.5) y tiene una pendiente relativamente grande alrededor de (0, 0.5), y cuando los datos tienden a infinito positivo e infinito negativo Cuando , el valor mapeado tenderá a 1 y 0 infinitamente. Según el cambio de la fórmula, se puede cambiar el umbral de segmentación, aquí como método de normalización, solo consideramos el caso de (0, 0.5) como umbral de segmentación:

from matplotlib import pyplot as plt
import numpy as np
import math


def sigmoid_function(z):
    fz = []
    for num in z:
        fz.append(1 / (1 + math.exp(-num)))
    return fz


if __name__ == '__main__':
    z = np.arange(-10, 10, 0.01)
    fz = sigmoid_function(z)
    plt.title('Sigmoid Function')
    plt.xlabel('z')
    plt.ylabel('σ(z)')
    plt.plot(z, fz)
    plt.show()

Resumir

Lo principal es descubrir el concepto de estandarización de datos según el método StandardScaler proporcionado por sklearn en aprendizaje automático y comprender mejor la prueba de Friedman.

Supongo que te gusta

Origin blog.csdn.net/m0_59596937/article/details/127181149
Recomendado
Clasificación