sklearn - standardize data python
¿Alguien puede explicarme StandardScaler? (7)
La idea principal es normalizar / estandarizar sus características antes de aplicar técnicas de aprendizaje automático.
Una cosa importante que debe tener en cuenta es que la mayoría (si no todas) scikit-learn
modelos / clases / funciones de scikit-learn
, esperan como entrada una matriz X
con dimensiones / forma [number_of_samples, number_of_features]
. Esto es muy importante. Algunas otras bibliotecas esperan como entrada la inversa.
StandardScaler()
normalizará las características (cada columna de X) de modo que cada columna / característica / variable tendrá mean = 0
y standard deviation = 1
.
Ejemplo:
from sklearn.preprocessing import StandardScaler
import numpy as np
data = np.array([[0, 0], [0, 0], [1, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(data)
[[0 0]
[0 0]
[1 1]
[1 1]]
print(scaled_data)
[[-1. -1.]
[-1. -1.]
[ 1. 1.]
[ 1. 1.]]
Verifique que la media de cada característica (columna) sea 0:
scaled_data.mean(axis = 0)
array([0., 0.])
Verifique que el estándar de cada característica (columna) es 1:
scaled_data.std(axis = 0)
array([1., 1.])
No puedo entender la page de StandardScaler
en la documentación de sklearn
.
¿Alguien puede explicarme esto en términos simples?
Cómo calcularlo:
Puede leer más aquí:
Después de aplicar StandardScaler()
, cada columna en X tendrá una media de 0 y una desviación estándar de 1.
Las fórmulas están listadas por otros en esta página.
Justificación: algunos algoritmos requieren que los datos se vean así (ver documentos de sklearn ).
Esto es útil cuando desea comparar datos que corresponden a diferentes unidades. En ese caso, desea eliminar las unidades. Para hacerlo de manera consistente con todos los datos, transforma los datos de manera que la varianza sea unitaria y que la media de la serie sea 0.
La idea detrás de StandardScaler
es que transformará sus datos de modo que su distribución tenga un valor medio 0 y una desviación estándar de 1. Dada la distribución de los datos, cada valor en el conjunto de datos tendrá el valor medio de muestra restado y luego se dividirá por la desviación estándar de todo el conjunto de datos.
Las respuestas anteriores son excelentes, pero necesitaba un ejemplo simple para aliviar algunas de las preocupaciones que he tenido en el pasado. Quería asegurarme de que efectivamente se tratara cada columna por separado. Ahora estoy tranquilo y no puedo encontrar qué ejemplo me había preocupado. Todas las columnas se escalan por separado como se describe en las anteriores.
CÓDIGO
import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler
data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]
df = pd.DataFrame(data, columns=[''N0'', ''N1'', ''N2'', ''N3'', ''N4'']).astype(''float64'')
sc_X = StandardScaler()
df = sc_X.fit_transform(df)
num_cols = len(df[0,:])
for i in range(num_cols):
col = df[:,i]
col_stats = ss.describe(col)
print(col_stats)
SALIDA
DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)
StandardScaler realiza la tarea de Normalización . Por lo general, un conjunto de datos contiene variables que son diferentes en escala. Por ejemplo, un conjunto de datos del empleado contendrá la columna EDAD con valores en la escala 20-70 y la columna SALARIO con valores en la escala 10000-80000 .
Como estas dos columnas son diferentes en escala, están estandarizadas para tener una escala común al construir un modelo de aprendizaje automático.