Phase 02 - Lesson 01

¿Qué es el machine learning?

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

El machine learning consiste en enseñar a las computadoras a encontrar patrones en los datos en lugar de escribir reglas a mano.

Tipo: Aprender Idiomas: Python Requisitos previos: Fase 1 (Fundamentos de Matemáticas) Tiempo: ~45 minutos

Objetivos de aprendizaje

  • Explicar la diferencia entre aprendizaje supervisado, no supervisado y por refuerzo e identificar qué tipo se aplica a un problema determinado.
  • Implementar un clasificador de centroide más cercano desde cero y evaluarlo con respecto a una línea de base aleatoria
  • Distinguir entre tareas de clasificación y regresión y seleccionar la función de pérdida adecuada para cada una.
  • Evaluar si un problema empresarial determinado es adecuado para ML o se resuelve mejor con reglas deterministas

El problema

Quiere crear un filtro de spam. El enfoque tradicional: sentarse y escribir cientos de reglas. "Si el correo electrónico contiene 'DINERO GRATIS', márquelo como spam. Si tiene más de 3 signos de exclamación, márquelo como spam". Pasas semanas escribiendo reglas. Luego los spammers cambian su redacción. Tus reglas se rompen. Escribes más reglas. El ciclo nunca termina.

El machine learning cambia esto. En lugar de escribir reglas, le da a la computadora miles de correos electrónicos etiquetados ("spam" o "no spam") y le deja descubrir las reglas por sí solo. La computadora encuentra patrones en los que nunca hubieras pensado. Cuando los spammers cambian de táctica, usted vuelve a entrenar con nuevos datos en lugar de reescribir el código.

Este cambio de "reglas de programación" a "aprender de los datos" es el núcleo del machine learning. Todos los motores de recomendación, asistentes de voz, vehículos autónomos y modelos de lenguaje funcionan de esta manera.

El concepto

Aprender de los datos, no de las reglas

La programación tradicional y el machine learning resuelven problemas en direcciones opuestas.

flowchart LR
    subgraph Traditional["Traditional Programming"]
        direction LR
        R[Rules] --> P1[Program]
        D1[Data] --> P1
        P1 --> O1[Output]
    end

    subgraph ML["Machine Learning"]
        direction LR
        D2[Data] --> P2[Learning Algorithm]
        O2[Expected Output] --> P2
        P2 --> M[Model / Rules]
    end

Programación tradicional: tú escribes las reglas. El programa los aplica a los datos para producir resultados.

Machine Learning: usted proporciona datos y resultados esperados. El algoritmo descubre las reglas.

El "modelo" que surge del entrenamiento ES las reglas, codificadas como números (pesos, parámetros). Generaliza a partir de ejemplos que ha visto para hacer predicciones sobre datos que nunca ha visto.

Los tres tipos de machine learning

flowchart TD
    ML[Machine Learning] --> SL[Supervised Learning]
    ML --> UL[Unsupervised Learning]
    ML --> RL[Reinforcement Learning]

    SL --> C[Classification]
    SL --> R[Regression]

    UL --> CL[Clustering]
    UL --> DR[Dimensionality Reduction]

    RL --> PO[Policy Optimization]
    RL --> VL[Value Learning]

Aprendizaje supervisado: Tienes pares entrada-salida. El modelo aprende a asignar entradas a salidas.

  • "Aquí tienes 10.000 fotografías etiquetadas como gato o perro. Aprende a diferenciarlos."
  • "Aquí están las características y precios de la casa. Aprenda a predecir el precio."

Aprendizaje no supervisado: solo tienes entradas. Sin etiquetas. El modelo encuentra estructura por sí solo.

  • "Aquí hay 10.000 historiales de compra de clientes. Encuentre agrupaciones naturales".
  • "Aquí hay 1000 puntos de datos dimensionales. Reduzca a 2 dimensiones manteniendo la estructura".

Aprendizaje por refuerzo: un agente realiza acciones en un entorno y recibe recompensas o sanciones. Aprende una estrategia (política) para maximizar la recompensa total.

  • "Juega a este juego. +1 por ganar, -1 por perder. Encuentra una estrategia".
  • "Controla este brazo robótico. +1 por recoger el objeto, -0,01 por cada segundo desperdiciado."

La mayor parte de lo que desarrollará en la práctica utiliza el aprendizaje supervisado. El aprendizaje no supervisado es común para el preprocesamiento y la exploración. El aprendizaje por refuerzo potencia la IA de juegos, la robótica y RLHF para modelos de lenguaje.

Más allá de los tres grandes

Las tres categorías anteriores son claras, pero el machine learning en el mundo real a menudo desdibuja las líneas.

Aprendizaje semisupervisado utiliza un pequeño conjunto de datos etiquetados y un gran conjunto de datos sin etiquetar. Es posible que tenga 100 imágenes médicas etiquetadas y 100.000 sin etiquetar. Las técnicas incluyen:

  • Propagación de etiquetas: Cree un gráfico que conecte puntos de datos similares. Las etiquetas se extienden desde los nodos etiquetados hasta los vecinos no etiquetados a través del gráfico.
  • Pseudoetiquetado: entrene un modelo con los datos etiquetados, utilícelo para predecir etiquetas para datos sin etiquetar y luego vuelva a entrenarlo con todo. El modelo inicia su propio conjunto de entrenamiento.
  • Regularización de coherencia: El modelo debe dar la misma predicción para una entrada y una versión ligeramente perturbada de esa entrada. Esto funciona incluso sin etiquetas.

Aprendizaje autosupervisado crea supervisión a partir de los propios datos. No se necesitan etiquetas humanas en absoluto. El modelo crea su propia tarea de predicción a partir de la estructura de los datos.

  • Modelado de lenguaje enmascarado (BERT): Oculta el 15% de las palabras en una oración, entrena el modelo para predecir las palabras que faltan. Las "etiquetas" proceden del texto original.
  • Aprendizaje contrastivo (SimCLR): Tome una imagen, cree dos versiones aumentadas. Entrene al modelo para que reconozca que provienen de la misma imagen y al mismo tiempo los distinga de versiones aumentadas de otras imágenes.
  • Predicción del siguiente token (GPT): Predice la siguiente palabra dadas todas las palabras anteriores. Cada documento de texto se convierte en un ejemplo de entrenamiento.

Estas no son categorías separadas de las tres grandes. Son estrategias que combinan ideas supervisadas y no supervisadas. El aprendizaje autosupervisado es técnicamente supervisado (el modelo predice algo), pero las etiquetas se generan automáticamente, no por humanos.

Clasificación vs Regresión

Estas son las dos principales tareas de aprendizaje supervisado.

Aspecto Clasificación Regresión
Salida Categorías discretas Números continuos
Ejemplo "¿Es este correo electrónico spam?" "¿Cuál será el precio de la casa?"
Espacio de salida {gato, perro, pájaro} Cualquier número real
Función de pérdida Entropía cruzada, precisión Error cuadrático medio, MAE
Decisión Límites entre clases Una curva que se ajusta a los datos

La clasificación responde "¿qué categoría?" La regresión responde "¿cuánto?"

Algunos problemas pueden plantearse de cualquier manera. Predecir si una acción sube o baja es clasificación. Predecir el precio exacto es una regresión.

El flujo de trabajo de machine learning

Cada proyecto de machine learning sigue el mismo proceso, independientemente del algoritmo.

flowchart LR
    A[Collect Data] --> B[Clean & Explore]
    B --> C[Feature Engineering]
    C --> D[Split Data]
    D --> E[Train Model]
    E --> F[Evaluate]
    F -->|Not good enough| C
    F -->|Good enough| G[Deploy]
    G --> H[Monitor]
    H -->|Performance drops| A

Recopilar datos: recopile datos sin procesar. Casi siempre es mejor contar con más datos, pero la calidad importa más que la cantidad.

Limpiar y explorar: maneje valores faltantes, elimine duplicados, visualice distribuciones y detecte anomalías. Este paso suele tardar entre el 60% y el 80% del tiempo total del proyecto.

Ingeniería de características: transforme datos sin procesar en características que el modelo pueda utilizar. Convierta las fechas en días de la semana. Normalizar columnas numéricas. Codificar variables categóricas. Las buenas características importan más que los algoritmos sofisticados.

Dividir datos: divídalos en conjuntos de entrenamiento, validación y prueba. El modelo se entrena con datos de entrenamiento, usted ajusta los hiperparámetros con los datos de validación e informa el rendimiento final con los datos de prueba.

Entrenar modelo: introduzca datos de entrenamiento en un algoritmo. El algoritmo ajusta los parámetros internos para minimizar una función de pérdida.

Evaluar: Mida el rendimiento de los datos de validación/prueba. Si el rendimiento no es aceptable, regrese y pruebe diferentes características, algoritmos o hiperparámetros.

Implementar: poner el modelo en producción donde realiza predicciones sobre nuevos datos.

Monitorizar: realiza un seguimiento del rendimiento a lo largo del tiempo. Las distribuciones de datos cambian (derivación de datos) y los modelos se degradan. Cuando el rendimiento baje, vuelva a entrenar.

Divisiones de entrenamiento, validación y prueba

Este es el concepto más importante en el que los principiantes se equivocan. Debe evaluar su modelo con datos que nunca ha visto durante el entrenamiento. De lo contrario, estás midiendo la memorización, no el aprendizaje.

flowchart LR
    subgraph Dataset["Full Dataset (100%)"]
        direction LR
        TR["Training Set (70%)"]
        VA["Validation Set (15%)"]
        TE["Test Set (15%)"]
    end

    TR -->|Train model| M[Model]
    M -->|Tune hyperparameters| VA
    VA -->|Final evaluation| TE
Dividir Propósito Cuando se utiliza Tamaño típico
Entrenamiento El modelo aprende de estos datos Durante el entrenamiento 60-80%
Validación Ajuste hiperparámetros, compare modelos Después de cada carrera de entrenamiento 10-20%
Prueba Estimación final imparcial del rendimiento Una vez, al final 10-20%

El conjunto de pruebas es sagrado. Lo miras exactamente una vez. Si sigue ajustando su modelo en función del rendimiento de la prueba, está entrenando efectivamente en el conjunto de prueba y los números informados no tienen sentido.

Para conjuntos de datos pequeños, utilice validación cruzada k veces: divida los datos en k partes, entrene en k-1 partes, valide en la parte restante, rote y promedie los resultados.

Sobreadaptación versus desadaptación

flowchart LR
    subgraph UF["Underfitting"]
        U1["Model too simple"]
        U2["High bias"]
        U3["Misses patterns"]
    end

    subgraph GF["Good Fit"]
        G1["Right complexity"]
        G2["Balanced"]
        G3["Generalizes well"]
    end

    subgraph OF["Overfitting"]
        O1["Model too complex"]
        O2["High variance"]
        O3["Memorizes noise"]
    end

    UF -->|Increase complexity| GF
    GF -->|Too much complexity| OF

Ajuste insuficiente: el modelo es demasiado simple para capturar los patrones en los datos. Una línea recta que intenta encajar en una relación curva. El error de entrenamiento es alto. El error de prueba es alto.

Sobreajuste: el modelo es demasiado complejo y memoriza los datos de entrenamiento, incluido su ruido. Una curva ondulante que pasa por cada punto de entrenamiento pero falla con nuevos datos. El error de entrenamiento es bajo. El error de prueba es alto.

Buen ajuste: El modelo captura patrones reales sin memorizar ruido. El error de entrenamiento y el error de prueba son razonablemente bajos.

Signos de sobreajuste:

  • La precisión del entrenamiento es mucho mayor que la precisión de la validación.
  • El modelo funciona bien con datos de entrenamiento pero pobre con datos nuevos.
  • Agregar más datos de entrenamiento mejora el rendimiento (el modelo estaba memorizando, no aprendiendo)

Correcciones para el sobreajuste:

  • Obtener más datos de entrenamiento
  • Reducir la complejidad del modelo (menos parámetros, arquitectura más simple)
  • Regularización (agregar una penalización por pesos grandes)
  • Abandono (cero neuronas aleatoriamente durante el entrenamiento)
  • Detención anticipada (detenga el entrenamiento cuando el error de validación comience a aumentar)

Correcciones por desajuste:

  • Utilice un modelo más complejo
  • Agregar más funciones
  • Reducir la regularización
  • Entrenar más tiempo

La compensación entre sesgo y varianza

Este es el marco matemático detrás del sobreajuste y el desajuste.

Sesgo: Error debido a suposiciones erróneas en el modelo. Un modelo lineal tiene un alto sesgo cuando la verdadera relación no es lineal. Un alto sesgo conduce a un desajuste.

Varianza: Error de sensibilidad a pequeñas fluctuaciones en los datos de entrenamiento. Un modelo con alta varianza ofrece predicciones muy diferentes cuando se entrena con diferentes subconjuntos de datos. Una variación alta conduce a un sobreajuste.

Complejidad del modelo Sesgo Variación Resultado
Demasiado bajo (modelo lineal para datos curvos) Alto Bajo Desacondicionamiento
Perfecto Medio Medio Buena generalización
Demasiado alto (polinomio de grado 20 para 10 puntos) Bajo Alto Sobreajuste

Error total = Sesgo^2 + Varianza + Ruido irreducible

No se puede reducir el ruido irreducible (es la aleatoriedad en los datos mismos). Desea encontrar el punto óptimo donde se minimiza el sesgo^2 + varianza.

Teorema del almuerzo gratis

No existe un algoritmo único que funcione mejor para cada problema. Un algoritmo que funciona bien en una clase de problemas funcionará mal en otra. Es por eso que los científicos de datos prueban múltiples algoritmos y comparan resultados.

En la práctica, la elección depende de:

  • ¿Cuántos datos tienes?
  • ¿Cuántas funciones hay?
  • Si la relación es lineal o no lineal.
  • Si necesita interpretabilidad
  • ¿Cuánta computación puedes permitirte?

Cuándo NO utilizar el machine learning

El machine learning es poderoso, pero no siempre es la herramienta adecuada. Antes de elegir un modelo, pregúntese si realmente lo necesita.

No utilice ML cuando:

  • Las reglas son simples y bien definidas. Cálculo de impuestos, algoritmos de clasificación, conversiones de unidades. Si puede escribir la lógica en unas pocas declaraciones if, un modelo agrega complejidad sin ningún beneficio.
  • No tienes datos o tienes muy pocos datos. ML necesita ejemplos de los que aprender. Con 10 puntos de datos, no puedes entrenar nada significativo. Primero recopile datos.
  • El costo de equivocarse es catastrófico y es necesario garantizar la exactitud. Cálculo de dosis médicas, control de reactores nucleares, verificación criptográfica. Los modelos de ML son probabilísticos. A veces se equivocarán. Si "a veces está mal" es inaceptable, utilice métodos deterministas.
  • Una tabla de búsqueda o una heurística resuelve el problema. Si un umbral o una tabla simple cubre el 99% de los casos, agregar ML aumenta el costo de mantenimiento sin una mejora significativa.
  • No se puede explicar la decisión y se requiere explicabilidad. Las industrias reguladas (préstamos, seguros, justicia penal) a veces exigen que cada decisión sea completamente explicable. Algunos modelos de ML son interpretables (regresión lineal, pequeños árboles de decisión). La mayoría no lo es.
  • El problema cambia más rápido de lo que puedes volver a entrenar. Si las reglas cambian diariamente y el volver a entrenar toma una semana, el modelo siempre queda obsoleto.

Utilice este diagrama de flujo de decisión:

flowchart TD
    A["Do you have data?"] -->|No| B["Collect data first or use rules"]
    A -->|Yes| C["Can you write the rules explicitly?"]
    C -->|"Yes, and they are simple"| D["Use rules. Skip ML."]
    C -->|"No, or they are too complex"| E["Is the cost of errors acceptable?"]
    E -->|"No, need guaranteed correctness"| F["Use deterministic methods"]
    E -->|Yes| G["Do you need explainability?"]
    G -->|"Yes, strictly"| H["Use interpretable models only"]
    G -->|"No, or partially"| I["Use ML"]
    I --> J["Do you have enough labeled data?"]
    J -->|Yes| K["Supervised learning"]
    J -->|"Some labels"| L["Semi-supervised learning"]
    J -->|"No labels"| M["Unsupervised or self-supervised"]

Constrúyelo

El código en code/ml_intro.py implementa un clasificador de centroide más cercano desde cero, el algoritmo ML más simple posible. Demuestra la idea central: aprender de los datos y luego predecir a partir de datos nuevos.

Paso 1: Clasificador de centroide más cercano desde cero

El clasificador de centroide más cercano calcula el centro (media) de cada clase en los datos de entrenamiento. Para predecir asigna cada nuevo punto a la clase cuyo centro está más cercano.

class NearestCentroid:
    def fit(self, X, y):
        self.classes = np.unique(y)
        self.centroids = np.array([
            X[y == c].mean(axis=0) for c in self.classes
        ])

    def predict(self, X):
        distances = np.array([
            np.sqrt(((X - c) ** 2).sum(axis=1))
            for c in self.centroids
        ])
        return self.classes[distances.argmin(axis=0)]

Ese es el algoritmo completo. Fit calcula dos medias. Predecir calcula distancias. Sin descenso de gradiente, sin iteración, sin hiperparámetros.

Paso 2: Entrenamiento con datos sintéticos

Generamos un conjunto de datos de clasificación 2D con dos clases que se superponen ligeramente. El clasificador de centroides dibuja un límite de decisión lineal entre los centros de clases.

rng = np.random.RandomState(42)
X_class0 = rng.randn(100, 2) + np.array([1.0, 1.0])
X_class1 = rng.randn(100, 2) + np.array([-1.0, -1.0])
X = np.vstack([X_class0, X_class1])
y = np.array([0] * 100 + [1] * 100)

Paso 3: comparar con una línea de base

Cada modelo de ML debe compararse con una línea de base trivial. Aquí, la línea base predice una clase aleatoria. Si su modelo de ML no supera las conjeturas aleatorias, algo anda mal.

baseline_preds = rng.choice([0, 1], size=len(y_test))
baseline_acc = np.mean(baseline_preds == y_test)

El clasificador de centroide debería tener una precisión de alrededor del 90% o más en este conjunto de datos limpio. La línea de base aleatoria ronda el 50%.

Por qué esto es importante

El clasificador de centroide más cercano es trivialmente simple. No tiene hiperparámetros, ni iteración, ni descenso de gradiente. Sin embargo, captura el patrón fundamental de ML:

  1. Aprenda una representación a partir de datos de entrenamiento (los centroides)
  2. Predecir nuevos datos usando esa representación (distancia más cercana)
  3. Evaluar con respecto a una línea de base (conjeturas aleatorias)

Cada algoritmo de ML, desde la regresión logística hasta los transformadores, sigue este mismo patrón de tres pasos. La representación se vuelve más compleja, pero el flujo de trabajo sigue siendo el mismo.

Paso 4: Lo que el clasificador de centroides no puede hacer

El clasificador de centroide más cercano supone que cada clase forma una única mancha. Traza límites de decisión lineales. Falla cuando:

  • Las clases tienen múltiples grupos (por ejemplo, el dígito "1" se puede escribir de varias maneras diferentes)
  • El límite de decisión no es lineal (por ejemplo, una clase rodea a otra)
  • Las entidades tienen escalas muy diferentes (la distancia está dominada por la entidad de mayor escala)

Estas limitaciones motivan todos los demás algoritmos que aprenderá. Los K vecinos más cercanos manejan múltiples clústeres. Los árboles de decisión manejan límites no lineales. El escalado de funciones soluciona el problema de escala. Cada lección se basa en las limitaciones de la anterior.

Úsalo

sklearn proporciona NearestCentroid y generadores de datos sintéticos:

from sklearn.neighbors import NearestCentroid
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(
    n_samples=500, n_features=2, n_redundant=0,
    n_clusters_per_class=1, random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

clf = NearestCentroid()
clf.fit(X_train, y_train)
print(f"Accuracy: {clf.score(X_test, y_test):.3f}")

Envíalo

Esta lección produce outputs/prompt-ml-problem-framer.md, un mensaje que convierte problemas comerciales vagos en tareas de machine learning concretas. Dele una descripción del problema ("queremos reducir la deserción" o "predecir la demanda para el próximo trimestre") e identificará el tipo de aprendizaje, definirá el objetivo de predicción, enumerará las características candidatas, seleccionará una métrica de éxito, establecerá una línea de base y señalará dificultades como la fuga de datos o el desequilibrio de clases. Úselo al comienzo de cualquier proyecto de ML para evitar crear algo incorrecto.

Términos clave

Término Lo que dice la gente Lo que realmente significa
Modelo "La IA" Una función matemática con parámetros que se pueden aprender y que asigna entradas a salidas
Entrenamiento "Enseñando la IA" Ejecutar un algoritmo de optimización para ajustar los parámetros del modelo para que las predicciones coincidan con los resultados conocidos
Característica "Una columna de entrada" Una propiedad medible de los datos que utiliza el modelo para hacer predicciones
Etiqueta "La respuesta" La salida conocida para un ejemplo de entrenamiento, utilizada para calcular la señal de error
Hiperparámetro "Una configuración que puedes modificar" Un parámetro establecido antes del entrenamiento que controla el proceso de aprendizaje (tasa de aprendizaje, número de capas)
Función de pérdida "Qué equivocado está el modelo" Una función que mide la brecha entre los resultados previstos y los reales, que la entrenamiento intenta minimizar
Sobreajuste "Memorizó la prueba" El modelo aprendió ruido específico del entrenamiento en lugar de patrones generales, por lo que falla con datos nuevos
Desacondicionamiento "No aprendió nada" El modelo es demasiado simple para capturar los patrones reales en los datos
Generalización "Funciona con nuevos datos" La capacidad del modelo para hacer predicciones precisas sobre datos en los que no fue entrenado
Validación cruzada "Pruebas en diferentes fragmentos" Dividir repetidamente los datos en pliegues de entrenamiento/prueba y promediar los resultados, dando una estimación de rendimiento más sólida.
Regularización "Mantener los pesos pequeños" Agregar un término de penalización a la función de pérdida que desalienta los modelos demasiado complejos
Deriva de datos "El mundo cambió" La distribución estadística de los datos entrantes cambia con el tiempo, lo que degrada el rendimiento del modelo

Ejercicios

  1. Tome cualquier conjunto de datos (por ejemplo, Iris, Titanic). Divídalo 70/15/15 en tren/validación/prueba. Explique por qué no debe ajustar los hiperparámetros en el conjunto de prueba.
  2. Enumere tres problemas del mundo real. Para cada uno, identifique si se trata de clasificación, regresión o agrupamiento, y si es supervisado o no supervisado.
  3. Un modelo obtiene un 99 % de precisión en los datos de entrenamiento, pero un 60 % en los datos de prueba. Diagnostica el problema y enumera tres cosas que intentarías solucionar.

Lectura adicional

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).