Noções Básicas de Machine Learning
10 exemplos para você começar com ML Clássico - 7 básicos e 3 intermediários.
Pré-requisitos
uv venv && source .venv/bin/activate
uv pip install "pandas>=2.2" "scikit-learn>=1.5" "numpy>=2.0"- Python 3.14.0 com um ambiente virtual isolado.
- pandas 2.2+ para dados tabulares; scikit-learn para algoritmos e pipelines de ML clássico.
Exemplos Básicos
1. Carregar Dados em um DataFrame
Comece todo projeto inspecionando a forma, os tipos de dados e os valores ausentes.
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
df = iris.frame.assign(species=iris.target_names[iris.target])
print(df.shape, df.dtypes)
print(df.isna().sum())as_frame=Trueretorna um DataFrame pandas diretamente de conjuntos de dados do sklearn.- Verifique
df.info()edf.describe()antes da modelagem. - Registre a versão do conjunto de dados ou o URL de origem para reprodutibilidade.
Relacionado: Conjuntos de Dados e Divisões - divisões de treino/teste/validação
2. Separar Recursos e Alvo
Defina X (entradas) e y (rótulo) explicitamente.
X = df.drop(columns=["species"])
y = df["species"]
feature_names = list(X.columns)- Os recursos devem excluir a coluna alvo e quaisquer colunas pós-resultado.
- Mantenha os nomes dos recursos como uma lista para inspeção e explicabilidade posteriores.
- Alvos categóricos podem permanecer como strings até que um codificador seja ajustado.
Relacionado: Engenharia de Recursos - codificação e dimensionamento
3. Divisão Treino/Teste
Reserve dados não vistos antes de ajustar qualquer coisa.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)stratify=ypreserva as proporções de classe em tarefas de classificação.- Ajuste pré-processadores e modelos apenas em
X_train- nunca no conjunto de dados completo. - O conjunto de teste é tocado uma vez no final para uma pontuação imparcial.
Relacionado: Conjuntos de Dados e Divisões - validação cruzada
4. Ajustar um Classificador de Linha de Base
Estabeleça um benchmark simples antes de ajustar modelos complexos.
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
clf = LogisticRegression(max_iter=1000, random_state=42)
clf.fit(X_train, y_train)
preds = clf.predict(X_test)
print("accuracy:", accuracy_score(y_test, preds))- A regressão logística é uma linha de base linear forte para classificação tabular.
- Compare cada novo modelo com essa pontuação de linha de base.
max_iter=1000evita avisos de convergência em alguns conjuntos de dados.
Relacionado: Aprendizado Supervisionado - escolhas de algoritmos
5. Dimensionar Recursos Numéricos
Muitos algoritmos esperam entradas com escala semelhante.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # ajustado apenas no treinofitaprende a média e o desvio padrão dos dados de treinamento;transformos aplica.- Nunca chame
fit_transformno conjunto de teste - isso vaza estatísticas. - Envolva o dimensionamento em um
Pipelinepara evitar erros manuais.
Relacionado: Engenharia de Recursos -
ColumnTransformer
6. Construir um Pipeline Livre de Vazamentos
Encadeie pré-processamento e modelo em um único objeto estimável.
from sklearn.pipeline import Pipeline
pipe = Pipeline([
("scaler", StandardScaler()),
("clf", LogisticRegression(max_iter=1000, random_state=42)),
])
pipe.fit(X_train, y_train)
print("pipeline accuracy:", accuracy_score(y_test, pipe.predict(X_test)))- Um
Pipelinegarante que os dados de teste nunca influenciem as estatísticas de pré-processamento. pipe.predict(X_test)executa o dimensionamento e a classificação em uma única chamada.- Serializar todo o pipeline para implantação, não apenas o modelo.
Relacionado: Pipelines - composição de etapas
7. Validação Cruzada para Pontuações Estáveis
Divisões únicas de treino/teste podem ser ruidosas; CV calcula a média de várias dobras.
from sklearn.model_selection import cross_val_score
scores = cross_val_score(pipe, X_train, y_train, cv=5, scoring="accuracy")
print(f"CV mean: {scores.mean():.3f} +/- {scores.std():.3f}")- A validação cruzada é executada apenas nos dados de treinamento - o conjunto de teste permanece bloqueado.
- Relate a média e o desvio padrão, não apenas a melhor dobra.
- Use
scoringapropriado para o problema (F1, ROC-AUC, etc.).
Relacionado: Avaliação de Modelos - métricas e curvas
Exemplos Intermediários
8. Codificar Recursos Categóricos
Colunas numéricas e categóricas mistas precisam de transformações direcionadas.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
num_cols = ["sepal length (cm)", "sepal width (cm)"]
cat_cols = ["petal length (cm)"] # exemplo: tratar uma coluna como categórica
preprocessor = ColumnTransformer([
("num", StandardScaler(), num_cols),
("cat", OneHotEncoder(handle_unknown="ignore"), cat_cols),
])ColumnTransformeraplica diferentes transformações a diferentes grupos de colunas.handle_unknown="ignore"evita falhas em categorias não vistas na inferência.- Ajuste o pré-processador dentro de um pipeline, nunca no conjunto de dados completo antecipadamente.
Relacionado: Engenharia de Recursos - padrões completos de codificação
9. Ajustar Hiperparâmetros com Busca em Grade
Pesquise combinações de parâmetros dentro da validação cruzada.
from sklearn.model_selection import GridSearchCV
param_grid = {"clf__C": [0.1, 1.0, 10.0]}
search = GridSearchCV(pipe, param_grid, cv=5, scoring="accuracy")
search.fit(X_train, y_train)
print("best params:", search.best_params_)
print("test accuracy:", accuracy_score(y_test, search.predict(X_test)))- Prefixe os parâmetros da etapa do pipeline com o nome da etapa (
clf__C). GridSearchCVseleciona os melhores parâmetros pela pontuação CV nos dados de treinamento.- Avalie o vencedor uma vez no conjunto de teste reservado.
Relacionado: Ajuste de Hiperparâmetros - Optuna e busca aleatória
10. Salvar e Carregar um Pipeline Treinado
Persista o artefato completo para inferência reproduzível.
import joblib
joblib.dump(pipe, "iris_pipeline.joblib")
loaded = joblib.load("iris_pipeline.joblib")
print(loaded.predict(X_test[:3]))- Salve todo o pipeline para que o pré-processamento acompanhe o modelo.
- Versionar o artefato junto com o hash dos dados de treinamento e a semente aleatória.
- Carregue e preveja com os mesmos nomes de coluna pandas usados durante o treinamento.
Relacionado: Pipelines - serialização e implantação
Versões da Pilha: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.