Aprendizaje automático en PHP: ¿realidad o compromiso?
Tradicionalmente, el aprendizaje automático (ML) se asocia con Python, R o Julia. Sin embargo, PHP, siendo uno de los lenguajes más populares para el desarrollo web, también tiene un ecosistema de bibliotecas para ML. Usar PHP para aprendizaje automático es un compromiso: se pierde en rendimiento y cantidad de modelos listos en comparación con Python, pero se obtiene una integración perfecta con aplicaciones web, un stack tecnológico unificado y la capacidad de implementar rápidamente algoritmos ML simples sin ejecutar microservicios.
En este artículo, analizaremos las principales bibliotecas para aprendizaje automático en PHP, sus capacidades y ejemplos de uso.
1. PHP-ML (PHP Machine Learning)
PHP-ML es la biblioteca más popular para ML en PHP. No requiere dependencias externas y está escrita completamente en PHP. Implementa algoritmos clásicos: clasificación, regresión, agrupamiento, reducción de dimensionalidad y métricas de evaluación.
Capacidades:
- Clasificación: Naive Bayes, SVM, k-Nearest Neighbors, Decision Tree
- Regresión: Linear Regression, SVR
- Agrupamiento: k-Means, DBSCAN
- Preprocesamiento de datos: normalización, estandarización
- Métricas: accuracy, precision, recall, F1-score
Ejemplo: Clasificación de los iris de Fisher
require_once __DIR__ . '/vendor/autoload.php';
use Phpml\\Classification\\KNearestNeighbors;use Phpml\\Dataset\\Demo\\IrisDataset;
$dataset = new IrisDataset();$samples = $dataset->getSamples();$labels = $dataset->getTargets();
$classifier = new KNearestNeighbors(3);$classifier->train($samples, $labels);
// Predicción para una nueva instancia (largo del sépalo, ancho del sépalo, largo del pétalo, ancho del pétalo)$newSample = [5.1, 3.5, 1.4, 0.2];$predicted = $classifier->predict($newSample);
echo "Clase predicha: " . $predicted; // 'Iris-setosa'2. Rubix ML
Rubix ML es una biblioteca más moderna y potente. A diferencia de PHP-ML, soporta redes neuronales, gradient boosting, métodos de conjunto y trabajo con grandes conjuntos de datos a través de generadores (lazy evaluation).
Características:
- Redes neuronales (Multilayer Perceptron, CNN mediante conversión)
- Conjuntos: Random Forest, Gradient Boosted Trees
- Pipelines de procesamiento de datos
- Soporte para características categóricas y One-Hot Encoding
- Exportación de modelos en formato serializado de PHP
Ejemplo: Regresión lineal con pipeline
require_once __DIR__ . '/vendor/autoload.php';
use Rubix\\ML\\Datasets\\Labeled;use Rubix\\ML\\Regressors\\Ridge;use Rubix\\ML\\Transformers\\NumericStringConverter;use Rubix\\ML\\Transformers\\MinMaxNormalizer;use Rubix\\ML\\Pipeline;
// Crear conjunto de datos$samples = [[1], [2], [3], [4], [5]];$labels = [1.5, 2.8, 4.1, 5.9, 7.2];
$dataset = new Labeled($samples, $labels);
// Crear pipeline$estimator = new Pipeline([ new NumericStringConverter(), new MinMaxNormalizer(),], new Ridge(1.0));
$estimator->train($dataset);
// Predicción$prediction = $estimator->predict([[6]]);echo "Valor predicho: " . $prediction[0]; // ~8.33. Keras PHP (TensorFlow PHP Binding)
Para trabajar con redes neuronales profundas en PHP se puede usar Keras PHP, un envoltorio sobre la biblioteca Python Keras/TensorFlow. Es esencialmente un puente que ejecuta scripts de Python desde PHP. No es una solución pura de PHP, pero permite usar toda la potencia de TensorFlow.
Ejemplo: Cargar un modelo preentrenado
use KerasPHP\\Keras;
$keras = new Keras();
// Cargar modelo desde archivo .h5$model = $keras->load_model('/path/to/model.h5');
// Preparar datos (array)$input = [[0.5, 0.2, 0.1]];
// Predicción$result =