Olá, Matheus. Tudo bem?
Sua pergunta é muito relevante e mostra que você está realmente atento aos detalhes, e isso é top!
A ordem correta, em geral, é normalizar os dados de treino e aplicar a mesma transformação nos dados de teste, exatamente como você mencionou. Isso é feito para evitar o "data leakage", ou seja, a transferência de informações dos dados de teste para os dados de treino, o que poderia levar a uma superestimação do desempenho do modelo.
No entanto, no curso que você mencionou, a normalização foi feita antes da separação dos dados. Isso pode ser aceitável em alguns casos, especialmente quando o dataset é pequeno e não há muita variação nos dados. No entanto, é importante notar que essa abordagem pode não ser a melhor prática em todos os casos.
Aqui está um exemplo prático para ilustrar isso:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Suponha que temos os seguintes dados:
X = [[1, 2, 3, 4], [2, 5, 6, 7], [3, 8, 9, 10], [4, 11, 12, 13]]
y = [0, 1, 0, 1]
# Dividindo os dados em treino e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=42)
# Normalizando os dados de treino
scaler = StandardScaler()
scaler.fit(X_train)
# Aplicando a mesma transformação nos dados de teste
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Neste exemplo, primeiro dividimos os dados em treino e teste. Em seguida, ajustamos o StandardScaler
apenas nos dados de treino e transformamos tanto os dados de treino quanto os dados de teste.
Espero ter ajudado e bons estudos!