Ir al contenido
learn

Aprendizaje automático, aplicado en IX — Misión

Arte conceptual: una ciudad subterránea de máquinas en una inmensa caverna. Engranajes de latón gigantes y brazos robóticos se inclinan sobre cúpulas de cristal que guardan forjas incandescentes, una pasarela cruza las paredes de roca, pequeñas siluetas humanas atraviesan el suelo y un pozo circular de luz del día se abre en lo alto.

Arte conceptual, no un diagrama: una ciudad subterránea original de máquinas de precisión, inspirada en el planeta-máquina Ix de Dune, de Frank Herbert. No muestra nada de los crates IX ni de su código. Generada en la máquina del autor con ComfyUI 0.36.0 y Z-Image-Turbo (licencia Apache 2.0), semilla 20260927; se desenfocó un panel indicador de 36 × 20 píxeles para quitar marcas parecidas a glifos. Prompt, workflow y tiempos de generación.

IX es un workspace de Rust con algoritmos de aprendizaje automático y de matemáticas que Claude Code puede llamar como herramientas: k-means, árboles de decisión, descenso de gradiente y unos ochenta crates más. Cuando una herramienta responde «3 clusters, silueta 0.50», quiero saber qué se calculó, si es correcto y cómo sería una respuesta mejor.

Mi forma de aprender un algoritmo es escribirlo. Cada lección escribe un algoritmo en unas pocas decenas de líneas, lo ejecuta junto con la versión de IX sobre los mismos datos, y compara ambos hasta el último dígito impreso. Cuando difieren, uno de los dos está mal, y averiguar cuál es donde más aprendo: eso es lo que registra el diario, lección a lección.

Escribes C# o Java. Te manejas con el álgebra del bachillerato: una recta y = w·x + b, una suma Σ, una raíz cuadrada, una derivada. No necesitas saber nada de aprendizaje automático. Tampoco necesitas conocer bien Rust: el código usa bucles, closures y las matrices de ndarray, y el curso de Rust cubre el resto.

Si has usado ML.NET, Tribuo o Deeplearning4j, cada lección relaciona lo que sabes con lo que hace IX.

ML.NET Tribuo IX
Lenguaje C#, F# Java Rust
Un conjunto de datos IDataView, columnas tipadas Dataset<T> de Example<T> dos matrices ndarray: Array2<f64> características, Array1 etiquetas
Un modelo IEstimator.Fit devuelve un ITransformer Trainer.train devuelve un Model un struct con fit y predict (traits Regressor, Classifier, Clusterer)
Preprocesamiento NormalizeMeanVariance, ajustado como un modelo TransformationMap StandardScaler::fit, luego transform
Desde un asistente de IA — — herramientas MCP como ix_kmeans e ix_ml_pipeline

Fuentes: tareas y entrenadores de ML.NET, clustering en Tribuo, README de IX.

Ningún conjunto de datos descargado: ambos archivos vienen de este repositorio, y data/extract.py los reconstruye a partir del historial de CI que el curso de DuckDB exportó el 2026-09-14 (runs.json y jobs.json) y de Git:

  • builds.csv, para la regresión: los 65 builds exitosos de este sitio, en orden de commit, con el número de páginas Markdown en ese commit (de 18 a 289) y los segundos del paso que las compila (de 10 a 48). ¿Crece el tiempo de build con el número de páginas?
  • jobs.csv, para la clasificación, el agrupamiento y todo lo que viene después: 186 jobs de CI, cada uno con cinco tiempos en segundos enteros (espera en la cola, preparación del job, checkout del repositorio, limpieza del checkout, finalización del job) y el sistema operativo del runner: 121 Ubuntu, 34 Windows, 31 macOS. ¿Pueden los tiempos decir qué sistema operativo ejecutó un job?

El curso usa por ahora siete crates de IX: ix-math (estadística, escalado, división, cálculo), ix-supervised (regresión, clasificación, métricas, validación cruzada), ix-optimize (descenso de gradiente, recocido, enjambre de partículas), ix-unsupervised (k-means, DBSCAN, mezclas gaussianas, ACP), ix-ensemble (bosques aleatorios, gradient boosting), ix-nn (capas, pérdidas, atención) e ix-voicings (el coeficiente de silueta y el agrupamiento de voicings de guitarra). Cargo.toml los toma de Git, fijados a un commit, como describe la referencia de Cargo:

ix-supervised = { git = "https://github.com/GuitarAlchemist/ix", rev = "490c39533627d296bf9f8f050e6fafc14d7a20c2" }

Cada enlace a código de IX en las lecciones apunta a ese commit, así que los números de línea siguen siendo correctos cuando IX cambia.

  • dividir los datos para entrenamiento y prueba, elegir una línea base y puntuar un modelo con la métrica que corresponde a la pregunta;
  • ajustar una recta de dos maneras, con la forma cerrada y con descenso de gradiente, y explicar por qué el descenso diverge;
  • entrenar y comparar la regresión logística, los k vecinos más cercanos y un árbol de decisión, con validación cruzada;
  • agrupar datos sin etiquetas con k-means, DBSCAN y una mezcla gaussiana, y juzgar los grupos;
  • reducir cinco dimensiones a dos, y decir exactamente qué costó la reducción;
  • combinar modelos débiles con bagging y con boosting, y saber cuál de los dos perdona un mal ajuste;
  • derivar una red a mano y comprobar la respuesta contra diferencias finitas;
  • elegir una regla de actualización, y distinguir una ejecución que divergió de una que convergió;
  • leer un algoritmo en IX, contrastarlo con una versión escrita a mano y con scikit-learn, y describir una diferencia con precisión.

Las lecciones 1 a 9 están escritas. El resto es el plan, una lección por familia de algoritmos que IX implementa, y cada una se publicará con su código y su comprobación cruzada como las demás.

# Lección Crates de IX Si conoces ML.NET
1 Datos, características y evaluación ix-math IDataView, TrainTestSplit, RegressionMetrics
2 Regresión lineal y descenso de gradiente ix-supervised, ix-optimize Ols, OnlineGradientDescent
3 Clasificación: regresión logística, k vecinos más cercanos, árboles de decisión ix-supervised LbfgsLogisticRegression, FastTree, CrossValidate
4 Agrupamiento: k-means, DBSCAN, mezclas gaussianas ix-unsupervised, ix-voicings KMeansTrainer
5 Componentes principales, y qué significa una razón de varianza ix-unsupervised ProjectToPrincipalComponents
6 Conjuntos: bagging, bosques aleatorios y gradient boosting ix-ensemble FastForest, LightGbm
7 Redes neuronales, y las diferencias finitas como juez ix-nn —
8 Optimización: descenso, momento, Adam y búsquedas sin gradiente ix-optimize, ix-math —
9 Los demás reductores: MDS, ACP con núcleo, NMF, LDA, t-SNE ix-unsupervised —
10 Secuencias: cadenas de Markov, modelos ocultos de Markov y Viterbi ix-graph —
11 Contar sin contar: filtros de Bloom, HyperLogLog, count-min, cuco ix-probabilistic —
12 Diferenciación automática: la cinta de Wengert ix-autograd —
13 Atención, normalización de capa y un bloque transformer ix-nn —
14 Aprendizaje por refuerzo: bandidos y Q-learning ix-rl —
15 Señales: la transformada de Fourier, ondículas, filtros y Kalman ix-signal —
16 Búsqueda: A*, búsqueda en árbol de Monte-Carlo, búsqueda local ix-search, ix-graph —
17 Evolución: algoritmos genéticos, evolución diferencial, frentes de Pareto ix-evolution —
18 Ejemplos adversarios, envenenamiento y las defensas ix-adversarial —
19 La forma de los datos: homología persistente ix-topo, ix-manifold —
20 En la GPU: productos de matrices, distancias y k vecinos más cercanos en WGSL ix-gpu —
21 Pipelines de principio a fin, y las herramientas MCP que llama un asistente ix-pipeline, ix-agent MLContext
— Cada crate y cada función pública los 80 con superficie pública —
— Diario