Conceitos de IA em Python

Fundamentos de classificação: softmax e k vizinhos mais próximos em Python

Classificar é escolher um rótulo, como gato ou cachorro. Um modelo pode dar uma pontuação por classe e deixar o softmax transformá-las em probabilidades, ou um método simples como k vizinhos mais próximos pode deixar os exemplos conhecidos mais próximos votarem.

O conceito em palavras simples

Classificar é escolher um rótulo, como gato ou cachorro. Um modelo pode dar uma pontuação por classe e deixar o softmax transformá-las em probabilidades, ou um método simples como k vizinhos mais próximos pode deixar os exemplos conhecidos mais próximos votarem.

Transforme pontuações em probabilidades de classe com softmax, avalie-as com entropia cruzada e classifique pontos com k vizinhos mais próximos.

Ideias principais

  • O softmax mantém a ordem das pontuações e faz com que somem 1.
  • A entropia cruzada categórica pune mais as respostas erradas dadas com confiança.
  • O k-NN não tem etapa de treinamento: ele compara um ponto novo com os exemplos guardados.
  • Naive Bayes e árvores de decisão (impureza de Gini, ganho de informação) são outros classificadores clássicos.

Quando usar?

  • Entender o que acontece dentro das redes neurais e das bibliotecas de IA.
  • Aprender a ideia antes de implementá-la nos desafios correspondentes.
  • Se preparar para cursos de aprendizado de máquina, entrevistas e projetos.

Veja na prática

Clique em qualquer lugar do gráfico da esquerda para classificar um ponto novo pelo voto dos seus k vizinhos mais próximos. Mude as pontuações à direita para ver o softmax reagir.

Código de exemplo

Executar código →
main.py
import math
from collections import Counter

# Softmax turns raw scores into probabilities that add up to 1.
def softmax(scores):
    exps = [math.exp(s - max(scores)) for s in scores]
    total = sum(exps)
    return [e / total for e in exps]

probs = softmax([2.0, 1.0, 0.1])
print("softmax:", [round(p, 3) for p in probs])
# Cross-entropy is small when the true class gets a high probability.
print("cross-entropy if class 0 is right:", round(-math.log(probs[0]), 3))

# k-nearest neighbours: label a point by a vote of the closest examples.
examples = [((1, 1), "cat"), ((1, 2), "cat"), ((5, 5), "dog"), ((6, 5), "dog"), ((5, 6), "dog")]
def knn(point, k=3):
    nearest = sorted(examples, key=lambda e: math.dist(point, e[0]))[:k]
    return Counter(label for _, label in nearest).most_common(1)[0][0]

print("(2, 1) ->", knn((2, 1)))
print("(5, 4) ->", knn((5, 4)))

Saída esperada

softmax: [0.659, 0.242, 0.099]
cross-entropy if class 0 is right: 0.417
(2, 1) -> cat
(5, 4) -> dog

Como funciona

softmax() aplica a exponencial às pontuações e divide pela soma delas, então as três probabilidades somam 1; subtrair antes o máximo evita estouro. A entropia cruzada é −log da probabilidade da classe correta. knn() ordena os exemplos pela distância e deixa os 3 mais próximos votarem.

Altere os valores e execute o programa no compilador Python online CodeUtility sem instalar Python.

Exercícios práticos

Altere as entradas e teste casos de borda antes de usar conjuntos de dados maiores.

  1. Mude as entradas ou os pesos e preveja a saída antes de executar.
  2. Imprima os valores intermediários para acompanhar cada passo do cálculo.
  3. Resolva os desafios indicados abaixo para implementar a ideia você mesmo.
Executar no IDE Python →

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios