Regressão e classificação na prática
- ⬜🧠 ML clássico: mental model e quando usar(Machine Learning Clássico)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Linear e logistic regression — os cavalos de batalha
Linear regression ajusta y = Xw + b minimizando erro quadrático. Logistic regression aplica sigmoide e minimiza log-loss para classificação binária. Ambos são lineares nos parâmetros, convexos (ótimo global garantido) e baratos de treinar.
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
pipe = Pipeline([
('scaler', StandardScaler()), # obrigatório para regularização justa
('clf', LogisticRegression(
penalty='l2', C=1.0, # C = 1/lambda (inverso da força de regularização)
class_weight='balanced', # dados desbalanceados? use balanced
solver='liblinear', max_iter=1000,
)),
])
pipe.fit(X_train, y_train)
proba = pipe.predict_proba(X_test)[:, 1] # probabilidade calibrada (quase)Sempre encapsule pré-processamento em Pipeline. Isso evita leakage (scaler treinado no train set inteiro) e torna o modelo deployável como um único artefato.
Regularização: L1, L2, ElasticNet
| Penalidade | O que faz com os coeficientes | Quando escolher |
|---|---|---|
| Soma dos valores absolutos | Zera os irrelevantes — seleciona variáveis | Muitas variáveis e suspeita de que poucas importam |
| Soma dos quadrados | Encolhe todos, sem eliminar nenhum | Variáveis correlacionadas que você quer manter juntas |
| Combinação das duas | Zera algumas e encolhe o resto | Grupos de variáveis correlacionadas em que o grupo importa, não o membro |
| Nenhuma | Ajuste livre | Poucas variáveis, muitos exemplos — e mesmo aí vale medir |
Adicionar penalidade no custo evita overfit e seleciona features. Matematicamente:
# Ridge (L2): penaliza soma de quadrados dos pesos
# argmin ||y - Xw||^2 + alpha * ||w||^2
from sklearn.linear_model import Ridge, Lasso, ElasticNet
ridge = Ridge(alpha=1.0) # default seguro
lasso = Lasso(alpha=0.01) # zera coefs -> feature selection
elastic = ElasticNet(alpha=0.01, l1_ratio=0.5) # meio termo
# Escolha alpha com validação cruzada
from sklearn.linear_model import RidgeCV
model = RidgeCV(alphas=[0.001, 0.01, 0.1, 1.0, 10.0], cv=5).fit(X, y)
print(model.alpha_) # melhor alpha encontradoSVM, Naive Bayes e KNN — quando cada um
# SVM — margem máxima, ótimo para poucos dados de alta dimensão (texto, genomica)
from sklearn.svm import SVC
svm = SVC(kernel='rbf', C=1.0, gamma='scale', probability=True)
# Naive Bayes — baseline imbatível em texto (spam, sentimento)
from sklearn.naive_bayes import MultinomialNB
nb = MultinomialNB(alpha=1.0) # com TF-IDF
# KNN — baseline rápido, sem treinamento, interpretável
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5, weights='distance')SVM não escala: treino é O(n²) a O(n³). Acima de ~50k exemplos, abandone em favor de logistic regression com SGD ou árvores boostadas.
Por que encapsular o pré-processamento junto do modelo num pipeline, em vez de normalizar os dados antes de dividir treino e validação?
Padrão de projeto: pipeline + CV + métrica honesta
from sklearn.model_selection import cross_val_score, StratifiedKFold
from sklearn.metrics import roc_auc_score
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(pipe, X, y, cv=cv, scoring='roc_auc')
print(f'AUC: {scores.mean():.3f} +/- {scores.std():.3f}')Comece sempre com logistic regression regularizada + CV estratificada. É o baseline honesto. Só parta para árvores/boosting se o baseline não for suficiente para a meta de negócio.
Perguntas frequentes
❓ Para que serve regularização?
❓ Quando usar modelo linear em 2026?
❓ Qual métrica usar em classificação desbalanceada?
Fixando
Regularização por soma de valores absolutos e por soma de quadrados fazem coisas diferentes. Qual é a distinção prática?
O módulo indica abandonar máquinas de vetores de suporte acima de algumas dezenas de milhares de exemplos. Por quê?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…