Machine Learning en TypeScript: revisión de bibliotecas para ML en 2024
TypeScript ocupa con confianza un nicho no solo en el desarrollo web, sino también en Data Science. Gracias a la tipificación estática y la compatibilidad con JavaScript, se convierte en una herramienta conveniente para construir modelos de machine learning (ML) que funcionan directamente en el navegador o en el servidor (Node.js). En este artículo, analizaremos las bibliotecas clave para machine learning en TypeScript, sus características, ejemplos de código y casos de uso.
1. TensorFlow.js — el framework principal para ML en el navegador
TensorFlow.js es un puerto del popular framework TensorFlow a JavaScript/TypeScript. Permite ejecutar el entrenamiento y la inferencia de modelos tanto en el navegador como en Node.js. La biblioteca admite aceleración por GPU a través de WebGL y WebGPU, lo que proporciona un aumento de rendimiento.
Características principales:
- Creación de redes neuronales con la API de alto nivel (tf.sequential, tf.model).
- Carga de modelos preentrenados desde TensorFlow Hub.
- Conversión de modelos de la versión de Python de TensorFlow al formato .json.
- Trabajo con tensores, optimizadores y capas.
Ejemplo: regresión lineal en TypeScript
import * as tf from '@tensorflow/tfjs';
// Datos: relación y = 2x - 1const xs = tf.tensor2d([-1, 0, 1, 2, 3, 4], [6, 1]);const ys = tf.tensor2d([-3, -1, 1, 3, 5, 7], [6, 1]);
// Creación del modeloconst model = tf.sequential();model.add(tf.layers.dense({units: 1, inputShape: [1]}));
// Compilaciónmodel.compile({optimizer: 'sgd', loss: 'meanSquaredError'});
// Entrenamientomodel.fit(xs, ys, {epochs: 250}).then(() => { model.predict(tf.tensor2d([10], [1, 1])).print(); // Salida: ~19 (cercano a 2*10 - 1 = 19)});2. ML5.js — biblioteca para ML creativo
ML5.js está construida sobre TensorFlow.js y está orientada a la facilidad de uso. Proporciona modelos listos para reconocimiento de imágenes, sonido, texto y gestos. Es ideal para proyectos educativos y prototipado.
Ejemplo: clasificación de imágenes
import * as ml5 from 'ml5';
// Carga del modelo preentrenado MobileNetconst classifier = ml5.imageClassifier('MobileNet');
// Clasificación de la imagenconst img = document.getElementById('myImage') as HTMLImageElement;classifier.classify(img, (err: Error | null, results: any[]) => { if (err) console.error(err); else console.log('Resultado:', results[0].label);});3. Brain.js — redes neuronales para Node.js y el navegador
Brain.js es una biblioteca ligera para construir redes neuronales en JavaScript/TypeScript. Admite varias arquitecturas: LSTM, RNN, GRU. Es excelente para tareas de predicción de series temporales y procesamiento de texto.
Ejemplo: red neuronal simple para XOR
import brain from 'brain.js';
const net = new brain.NeuralNetwork();
net.train([ { input: [0, 0], output: [0] }, { input: [0, 1], output: [1] }, { input: [1, 0], output: [1] }, { input: [1, 1], output: [0] }]);
const output = net.run([1, 0]); // ~0.99console.log(output);4. Synaptic — biblioteca arquitectónicamente flexible
Synaptic permite crear redes neuronales de cualquier arquitectura, incluidos perceptrones multicapa, redes recurrentes y mapas autoorganizados de Kohonen. No requiere dependencias y funciona en el navegador.
Ejemplo: creación de un perceptrón
import { Architect, Trainer } from 'synaptic';
const network = new Architect.Perceptron(2, 3, 1);const trainer = new Trainer(network);
trainer.train([ { input: [0, 0], output: [0] }, { input: [0, 1], output: [1] }, { input: [1, 0], output: [1] }, { input: [1, 1], output: [0] }], { iterations: 1000 });
console.log(network.activate([1, 0])); // ~0.98