Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Normalização antes da separação dos dados

Olá.

Em um questionamento anterior que fiz em outro curso dessa formação, me foi explicado que a normalização é feita com os dados de treino para evitar "data leakage".

Ou seja, primeiro separo o dataset em treino (x_treino) e teste (x_teste) e aí depois aplico normalização, fazendo o fit() somente com x_treino e posteriormente o transform() em x_treino e em x_teste.

Já neste curso a normalização foi feita em todo o dataset (o fit() e o transform() foi aplicado em x) e só depois de normalizado que foi feita a separação entre treino e teste.

Afinal, qual é a ordem correta? Ou isso não importa em um dataset pequeno como o da aula?

Obrigado.

1 resposta
solução!

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!