Menu
CoddyTech

StandardScaler

Parte da seção Estatística para ML do Journey de Machine Learning da Coddy. Lição 50 de 64.

Um modelo precisa escalar cada nova amostra exatamente como escalou os dados de treinamento. O StandardScaler do scikit-learn padroniza e memoriza como:

Um diagrama: os 4 trabalhos anteriores de um limpador de janelas, X_train, passam por fit até chegar a um escalador que memoriza mean_ 8 e 22 e scale_ 4.47 e 9.72. Um novo trabalho, 8 e 30, passa por transform, usando esses números, e resulta em 0.00 e 0.82

No código, cada trabalho é representado pelo número de janelas limpas e pelos minutos gastos:

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]])  # uma amostra: uma tabela com uma linha
print(np.round(scaler.transform(X_new), 2))

Isso imprime:

[[0.   0.82]]

fit aprende a média e o desvio padrão de cada coluna (dividindo por n, como np.std), armazenados em scaler.mean_ e scaler.scale_. transform os aplica.

Nunca ajuste o modelo com novos dados: a média seria calculada a partir dos próprios dados, que se tornariam [[0. 0.]]. Nos dados de treinamento, fit_transform faz as duas coisas em uma única chamada.

challenge icon

Desafio

Médio

Um classificador aprendeu com os abacates em X_train: peso, firmeza e dias desde a colheita. O programa lê um novo abacate na tabela de uma linha new_avocado, mas a escala inicial imprime [[0. 0. 0.]] para cada abacate.

  1. Corrija: escale o novo abacate usando as médias e os desvios padrão do treinamento.
  2. Conte as medidas que estão a mais de 2 desvios padrão da média do treinamento, em qualquer direção, e imprima como abaixo.

Para outro lote:

New avocado: [[2.98 0.   0.09]]
1 of 3 measurements are more than 2 std from the training avocados

Experimente você mesmo

import numpy as np
from sklearn.preprocessing import StandardScaler

# Abacates de treinamento, um por linha: peso em gramas, firmeza de 1 a 10, dias desde a colheita
X_train = np.array([[210, 8, 2],
                    [185, 5, 6],
                    [240, 7, 3],
                    [170, 3, 9],
                    [225, 6, 5],
                    [195, 4, 7]])
# Um novo abacate na esteira
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])

# Isso imprime [[0. 0. 0.]] para todos os abacates: corrija isso
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Estatística para ML

Pratique por conta própria: Compilador de Python online