Conceptos de IA en Python

Fundamentos de clasificación: softmax y k vecinos más cercanos en Python

Clasificar significa elegir una etiqueta, como gato o perro. Un modelo puede dar una puntuación por clase y dejar que softmax las convierta en probabilidades, o un método sencillo como k vecinos más cercanos puede hacer votar a los ejemplos conocidos más próximos.

El concepto en palabras sencillas

Clasificar significa elegir una etiqueta, como gato o perro. Un modelo puede dar una puntuación por clase y dejar que softmax las convierta en probabilidades, o un método sencillo como k vecinos más cercanos puede hacer votar a los ejemplos conocidos más próximos.

Convierte puntuaciones en probabilidades de clase con softmax, evalúalas con entropía cruzada y clasifica puntos con k vecinos más cercanos.

Ideas clave

  • Softmax mantiene el orden de las puntuaciones y hace que sumen 1.
  • La entropía cruzada categórica castiga sobre todo las respuestas equivocadas dadas con seguridad.
  • k-NN no tiene fase de entrenamiento: compara un punto nuevo con los ejemplos guardados.
  • Naive Bayes y los árboles de decisión (impureza de Gini, ganancia de información) son otros clasificadores clásicos.

¿Cuándo se utiliza?

  • Entender qué pasa dentro de las redes neuronales y las bibliotecas de IA.
  • Aprender la idea antes de implementarla en los retos correspondientes.
  • Prepararte para cursos de aprendizaje automático, entrevistas y proyectos.

Pruébalo en acción

Haz clic en cualquier parte del gráfico de la izquierda para clasificar un punto nuevo por el voto de sus k vecinos más cercanos. Cambia las puntuaciones de la derecha para ver reaccionar a softmax.

Código de ejemplo

Ejecutar 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)))

Resultado esperado

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

Cómo funciona

softmax() aplica la exponencial a las puntuaciones y divide entre su suma, así que las tres probabilidades suman 1; restar antes el máximo evita desbordamientos. La entropía cruzada es −log de la probabilidad de la clase correcta. knn() ordena los ejemplos por distancia y hace votar a los 3 más cercanos.

Cambia los valores y ejecuta el programa en el compilador Python online de CodeUtility sin instalar Python.

Ejercicios prácticos

Modifica las entradas y prueba casos límite antes de usar conjuntos de datos mayores.

  1. Cambia las entradas o los pesos y predice la salida antes de ejecutar.
  2. Imprime los valores intermedios para seguir cada paso del cálculo.
  3. Resuelve los retos enlazados abajo para implementar la idea por tu cuenta.
Ejecutar en el IDE de Python →

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos