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
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.
- Mude as entradas ou os pesos e preveja a saída antes de executar.
- Imprima os valores intermediários para acompanhar cada passo do cálculo.
- Resolva os desafios indicados abaixo para implementar a ideia você mesmo.
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.
- Função softmax Transforme pontuações brutas em probabilidades que somam 1, sem estouro com valores grandes. Fácil
- Entropia cruzada categórica Meça a perda de um classificador multiclasse a partir das probabilidades previstas e das classes verdadeiras. Fácil
- Classificador de k vizinhos mais próximos Preveja um rótulo por votação da maioria entre os k pontos de treinamento mais próximos. Médio
- Classificador Naive Bayes Preveja uma classe a partir de variáveis categóricas com o teorema de Bayes e a suavização de Laplace. Médio
- Impureza de Gini Meça o quanto os rótulos de um grupo estão misturados, a pontuação que as árvores de decisão usam para escolher divisões. Fácil
- Ganho de informação Calcule quanto a divisão por uma variável reduz a entropia, o critério por trás das árvores de decisão ID3. Médio