Imagine que você está aprendendo a fazer pão pela primeira vez. Primeiro, você estuda receitas, experimenta diferentes técnicas e ajusta ingredientes – isso é o treinamento. Depois de dominar o processo, quando alguém te entrega farinha, água e fermento, você transforma esses ingredientes em pão fresco – isso é a transformação. No machine learning, esses dois conceitos trabalham juntos: o treinamento ensina o algoritmo a reconhecer padrões, e a transformação aplica esse conhecimento a novos dados.
Como isso funciona na prática?
O treinamento (training) é o processo onde o algoritmo aprende com dados históricos, ajustando seus parâmetros internos para encontrar padrões e relações. Pense nisso como um estudante revisando material antes de uma prova. A transformação (transform) é quando o modelo treinado aplica seu conhecimento a dados novos nunca vistos antes, similar a um estudante usando o que aprendeu para resolver questões da prova. No Scikit-Learn, essa separação é fundamental e segue o padrão consistente: primeiro você chama fit() para treinar, depois transform() ou predict() para aplicar.
Mãos na massa: treinando e transformando dados de receitas
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
""" Demonstração completa do ciclo treinamento-transformacao Aplica PCA para reduzir dimensionalidade de características de receitas """ from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline import numpy as np # Dados de receitas: [farinha_g, agua_ml, fermento_g, sal_g, acucar_g] receitas_treino = np.array([ [500, 300, 10, 10, 5], # Pão francês [400, 240, 15, 8, 20], # Pão doce [600, 360, 12, 12, 0], # Pão integral [450, 270, 8, 9, 2], # Pão caseiro [350, 210, 20, 7, 25] # Pão de leite ]) # Novas receitas para transformar (dados nunca vistos) receitas_novas = np.array([ [480, 290, 11, 9, 3], # Nova receita similar [550, 330, 9, 11, 1] # Outra nova receita ]) print("=== FASE 1: TREINAMENTO (fit) ===") print("Dados de treinamento originais (5 dimensões):") print(receitas_treino) # Criando pipeline: normalização + PCA pipeline = Pipeline([ ('scaler', StandardScaler()), # Normaliza os dados ('pca', PCA(n_components=2)) # Reduz para 2 dimensões ]) # TREINAMENTO: Aprendendo com os dados de treino pipeline.fit(receitas_treino) # Extraindo o PCA treinado para inspecionar pca_treinado = pipeline.named_steps['pca'] print(f"\nVariância explicada pelos componentes: {pca_treinado.explained_variance_ratio_}") print(f"Variância total preservada: {sum(pca_treinado.explained_variance_ratio_):.1%}") print("\n=== FASE 2: TRANSFORMAÇÃO (transform) ===") print("Aplicando o modelo treinado a novas receitas:") # TRANSFORMAÇÃO: Aplicando às novas receitas receitas_transformadas = pipeline.transform(receitas_novas) print("Novas receitas transformadas (2 dimensões):") print(receitas_transformadas) # Verificando a transformação inversa (opcional) receitas_reconstruidas = pipeline.inverse_transform(receitas_transformadas) print("\nReconstrução das receitas (com perda de informação):") print(receitas_reconstruidas) print("\nDiferença entre original e reconstruído:") print(receitas_novas - receitas_reconstruidas) |
Os detalhes que fazem diferença
O treinamento e a transformação devem sempre usar exatamente o mesmo pré-processamento para garantir consistência. Um erro comum é treinar com dados normalizados e depois transformar dados não normalizados, ou vice-versa. Contudo, o Scikit-Learn oferece pipelines que automatizam essa consistência. Analogamente importante é a separação estrita entre dados de treino e teste; você nunca deve usar informações dos dados de teste durante o treinamento. A ordem das operações também é crucial: primeiro normalizar, depois aplicar transformações mais complexas como PCA. Lembre-se que alguns algoritmos como KNN não têm fase de treinamento tradicional – eles apenas memorizam os dados.
- Ordem correta: Sempre treine antes de transformar
- Consistência: Use o mesmo pré-processamento em treino e transformação
- Pipelines: Automatizam a sequência de operações
- Validação: Nunca use dados de teste no treinamento
Perguntas que os iniciantes fazem
Você deve estar se perguntando: “Por que não treinar e transformar tudo de uma vez?” Excelente questão! A separação permite que você valide o modelo em dados não vistos durante o treinamento, prevenindo overfitting. Uma confusão comum é entre fit_transform() e fazer fit() seguido de transform() separadamente – são equivalentes, mas o método combinado é mais conveniente para dados de treino. Outra dúvida frequente: “Posso reutilizar um modelo treinado com dados diferentes?” Sim! Uma vez treinado, você pode aplicar o modelo a quantos dados novos quiser, mas não pode retreinar parcialmente – é tudo ou nada.
Para onde ir agora?
Pratique criando pipelines completos com múltiplos passos de transformação. Experimente diferentes sequências: normalização, seleção de características, redução dimensional. Use validação cruzada para garantir que seu pipeline generaliza bem. O momento “aha!” acontece quando você percebe que pipelines robustos tornam seu código mais reproduzível e menos propenso a erros de pré-processamento.
Assuntos relacionados
Para dominar treinamento e transformação, estude estes conceitos:
- Estatística: estimação de parâmetros e inferência
- Otimização: algoritmos de aprendizado e convergência
- Validação de modelos: overfitting, underfitting e generalização
- Pré-processamento: normalização, codificação e imputação
- Engenharia de features: criação e seleção de características