StandardScaler
Parte de la sección Estadística para ML del Journey de Machine Learning de Coddy. Lección 50 de 64.
Un modelo debe escalar cada muestra nueva exactamente igual que escaló sus datos de entrenamiento. StandardScaler de scikit-learn estandariza los datos y recuerda cómo:
En el código, cada trabajo indica las ventanas limpiadas y los minutos empleados:
from sklearn.preprocessing import StandardScaler
X_train = np.array([[2, 8], [10, 25], [6, 20], [14, 35]])
scaler = StandardScaler()
scaler.fit(X_train)
X_new = np.array([[8, 30]]) # una muestra: una tabla con una fila
print(np.round(scaler.transform(X_new), 2))Esto imprime:
[[0. 0.82]]fit aprende la media y la desviación estándar de cada columna (dividiendo entre n, como np.std), que se guardan en scaler.mean_ y scaler.scale_. transform las aplica.
Nunca ajustes con datos nuevos: el trabajo tendría su propia media y se convertiría en [[0. 0.]]. Con los datos de entrenamiento, fit_transform hace ambas cosas en una sola llamada.
Desafío
IntermedioUn clasificador aprendió de los aguacates en X_train: peso, firmeza y días desde la cosecha. El programa lee un aguacate nuevo en la tabla de una fila new_avocado, pero el escalado inicial imprime [[0. 0. 0.]] para cada aguacate.
- Corrígelo: escala el aguacate nuevo con las medias y desviaciones estándar de entrenamiento.
- Cuenta sus mediciones que estén a más de 2 desviaciones estándar de la media de entrenamiento, en cualquiera de las dos direcciones, e imprime como se muestra abajo.
Para otro lote:
New avocado: [[2.98 0. 0.09]]
1 of 3 measurements are more than 2 std from the training avocadosPruébalo tú mismo
import numpy as np
from sklearn.preprocessing import StandardScaler
# Aguacates de entrenamiento, una fila por cada uno: peso en gramos, firmeza de 1 a 10, días desde la cosecha
X_train = np.array([[210, 8, 2],
[185, 5, 6],
[240, 7, 3],
[170, 3, 9],
[225, 6, 5],
[195, 4, 7]])
# Un aguacate nuevo en la cinta transportadora
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])
# Esto imprime [[0. 0. 0.]] para todos los aguacates: corrígelo
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Estadística para ML
1Centro y dispersión
Media y medianaPercentiles y cuartilesVarianza y desviación estándar¿Muestra o población?El valor más frecuenteRepaso: tiempos de entrega4Muestras y poblaciones
Población y muestraLas medias muestrales varíanLa distribución muestralMuestras más grandes, menos ruidoRepaso: Encuestar a un pueblo7Líneas de tendencia
ResiduosAjuste por mínimos cuadradosTrazar el ajustePredecir con una línea¿Qué tan bueno es el ajuste?Repaso: horas de práctica10Codificación de categorías
Categorías como númerosCodificación one-hotAgrupación de números en intervalosRepaso: anuncios de autos2Distribuciones
Histogramas de densidadFormas de los datosCurva normalRegla del 68-95-99,7Puntuaciones zRepaso: duración de la batería5Valores atípicos
Diagramas de cajaLa regla del RICLa regla del valor ZTratamiento de valores atípicosRepaso: fallos de los sensores3Probabilidad mediante simulación
La probabilidad como frecuenciaLa ley de los grandes númerosSuma de dadosValor esperadoProbabilidad condicionalRepaso: probabilidades del puesto de dados6Relaciones
Lectura de diagramas de dispersiónCorrelaciónMatriz de correlaciónMapas de calor de correlaciónCorrelación no es causalidadRepaso: helado y sol9Escalado de características
Por qué escalar las característicasEscalado mín-máxEstandarizaciónStandardScalerRepaso: compañeros de escaladaPractica por tu cuenta: Compilador de Python online