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:
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.
Desafio
MédioUm 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.
- Corrija: escale o novo abacate usando as médias e os desvios padrão do treinamento.
- 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 avocadosExperimente 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
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
1Centro e dispersão
Média e medianaPercentis e quartisVariância e desvio padrãoAmostra ou população?O valor mais frequenteRevisão: tempos de entrega4Amostras e Populações
População e AmostraAs médias amostrais variamA distribuição amostralAmostras maiores, menos ruídoRevisão: pesquisa de opinião em uma cidade7Linhas de tendência
ResíduosAjuste por mínimos quadradosTraçando o ajusteFazendo previsões com uma linhaQuão bom é o ajuste?Revisão: horas de prática10Codificação de Categorias
Categorias como NúmerosCodificação One-HotAgrupamento de Números em FaixasRecapitulação: Anúncios de Carros2Distribuições
Histogramas de densidadeFormatos dos dadosA curva normalA regra 68-95-99,7Escores ZRecapitulando: duração da bateria5Valores atípicos
Diagramas de caixaA regra do IQRA regra do Z-scoreComo lidar com valores atípicosRevisão: falhas nos sensores8Comparando grupos
Gráficos de caixa por grupoDiferença entre médiasPode ser acaso?Valores-pO teste tRevisão: teste A/B11Explorando um conjunto de dados
Um primeiro olharTodos os atributos de uma vezAtributos em relação ao rótuloOs dois melhores atributosRevisão: dados de diabetes3Probabilidade por Simulação
Probabilidade como frequênciaA Lei dos Grandes NúmerosSomas de dadosValor esperadoProbabilidade condicionalRevisão: chances na barraca de dados6Relações
Lendo gráficos de dispersãoCorrelaçãoMatriz de correlaçãoMapas de calor de correlaçãoCorrelação não é causalidadeRevisão: sorvete e sol9Escalonamento de Recursos
Por que escalar os recursosEscalonamento Min-MaxPadronizaçãoStandardScalerRevisão: Parceiros de escaladaPratique por conta própria: Compilador de Python online