Trilha 19 · Machine Learning

O que é aprendizado de máquina

Em vez de escrever regras, mostramos exemplos ao computador e deixamos ele descobrir os padrões. O desafio não é acertar nos dados que ele viu — é generalizar para os que ainda não viu.

① Intuição

Aprender de exemplos, não de regras

Imagine ensinar alguém a reconhecer um gato. Você não lista regras ("tem bigodes, orelhas triangulares, quatro patas...") — você mostra muitas fotos de gatos e a pessoa passa a reconhecer gatos novos, inclusive raças que nunca viu. Machine learning faz o mesmo: a partir de exemplos, o modelo ajusta parâmetros internos até capturar o padrão.

A grande questão não é "o modelo acerta os exemplos de treino?" — isso é fácil, basta decorar. A questão é generalização: ele acerta dados novos? Um modelo que decora cada exemplo de treino mas erra o resto é como um aluno que memoriza o gabarito sem entender a matéria.

Três grandes famílias: no supervisionado os dados têm rótulos (foto → "gato") e o modelo aprende a prever o rótulo. No não-supervisionado não há rótulos — o modelo descobre estrutura sozinho (ex: agrupar clientes parecidos). No por reforço, um agente aprende por tentativa e erro maximizando uma recompensa (ex: vencer um jogo).
② Visualização interativa

Subajuste, bom ajuste e sobreajuste

Arraste o grau do polinômio. Pontos cheios (azuis) são o treino; os ocos (laranjas) são dados de teste que o modelo nunca viu. Observe que o erro de teste é mínimo num grau intermediário — nem rígido demais, nem flexível demais.

Erro de TREINO
0.012
Erro de TESTE
0.004
Diagnóstico
Bom ajuste

treino (o modelo vê)   teste (o modelo nunca viu). Grau baixo → reta rígida que erra todo mundo (subajuste). Grau alto → a curva passa por cada ponto de treino mas serpenteia loucamente e erra os de teste (sobreajuste). O segredo está no meio.

③ Explicação técnica

Programação tradicional vs. ML

// Programação tradicional vs. machine learning

// Tradicional: humano escreve as REGRAS
def eh_spam(email):
    if "ganhe dinheiro" in email: return True
    if email.count("!") > 5:   return True
    return False
// → frágil: spammers mudam, você reescreve regras para sempre

// Machine learning: humano dá EXEMPLOS, máquina acha as regras
modelo = treinar(
    exemplos = [(email1, "spam"), (email2, "ok"), ...],  // dados rotulados
)
modelo.prever(novo_email)  // → generaliza para e-mails nunca vistos

// A "regra" agora é um conjunto de PARÂMETROS aprendidos,
// ajustados para minimizar o erro nos exemplos de treino.

Treino, validação, teste e o tradeoff viés-variância

// A regra de ouro: separe treino de teste

dados = embaralhar(todos_os_dados)
treino      = dados[:70%]   // o modelo aprende aqui
validacao   = dados[70:85%] // ajusta hiperparâmetros (ex: complexidade)
teste       = dados[85:]    // medição final, usada UMA vez

// Por que separar? Decorar ≠ aprender.
// Um modelo que decora o treino tem erro ~0 no treino
// e erro ALTO no teste → sobreajuste (overfitting).

// Tradeoff viés-variância:
//   viés alto    = modelo simples demais  → subajuste
//   variância alta = modelo complexo demais → sobreajuste
//   objetivo: o ponto doce no meio (menor erro de teste)
Por que mais dados ajudam: com poucos exemplos, um modelo complexo "decora" facilmente (sobreajuste). Com muitos exemplos diversos, decorar fica impossível — o modelo é forçado a capturar o padrão real. Por isso datasets grandes (ImageNet, Common Crawl) foram tão decisivos quanto os próprios algoritmos no avanço recente do deep learning.
④ Projeto para programar

Seu primeiro classificador

Mini projeto: use scikit-learn com o dataset Iris. Carregue com load_iris(), separe treino/teste com train_test_split(test_size=0.3), treine um DecisionTreeClassifier e imprima a acurácia em treino e em teste. Compare: por que a acurácia de treino costuma ser maior?

Projeto principal: reproduza a demo acima do zero. Gere 12 pontos de uma função (ex: y = sin(2x) + ruído), ajuste polinômios de grau 1 a 9 com numpy.polyfit, e plote o erro de treino e o erro num conjunto de teste separado em função do grau. Encontre o grau que minimiza o erro de teste — você vai redescobrir o tradeoff viés-variância empiricamente.

Desafio extra: implemente k-fold cross-validation à mão: divida os dados em k partes, treine em k−1 e valide na restante, rodando k vezes. Calcule a média e o desvio-padrão da acurácia. Por que isso é mais confiável do que uma única divisão treino/teste, especialmente com poucos dados?

⑤ Exercícios rápidos

Teste sua intuição

Qual a diferença essencial entre ML e programação tradicional?
O que caracteriza o sobreajuste (overfitting)?
Por que separamos os dados em treino e teste?
⑥ Aplicações no mundo real

Onde você encontra isso

📧

Filtros de spam

O Gmail classifica bilhões de e-mails por dia com modelos treinados em exemplos rotulados pelos próprios usuários (marcar "spam" / "não é spam"). Como spammers evoluem, o modelo é re-treinado continuamente — exatamente o cenário onde regras fixas falham e ML brilha.

🎬

Recomendações

Netflix, Spotify e YouTube aprendem dos seus cliques e do histórico de usuários parecidos para prever o que você vai gostar. O desafio de generalização aparece aqui: recomendar algo novo que você ainda não viu, não só repetir o que já assistiu.

🏥

Apoio ao diagnóstico

Modelos treinados em milhares de imagens médicas rotuladas por especialistas ajudam a detectar tumores em mamografias e retinopatia em exames de fundo de olho. A validação rigorosa em dados não vistos é vital — um modelo que sobreajusta poderia falhar perigosamente em pacientes novos.

← Trilha: Machine Learning Próxima: Regressão linear →