Машинное обучение на PHP: реальность или компромисс?
Традиционно машинное обучение (ML) ассоциируется с Python, R или Julia. Однако PHP, будучи одним из самых популярных языков для веб-разработки, также имеет экосистему библиотек для ML. Использование PHP для машинного обучения — это компромисс: вы теряете в производительности и количестве готовых моделей по сравнению с Python, но получаете бесшовную интеграцию с веб-приложениями, единый стек технологий и возможность быстро внедрять простые ML-алгоритмы без запуска микросервисов.
В этой статье мы разберём основные библиотеки для машинного обучения на PHP, их возможности и примеры использования.
1. PHP-ML (PHP Machine Learning)
PHP-ML — самая популярная библиотека для ML на PHP. Она не требует внешних зависимостей и написана полностью на PHP. Реализует классические алгоритмы: классификацию, регрессию, кластеризацию, снижение размерности и метрики оценки.
Возможности:
- Классификация: Naive Bayes, SVM, k-Nearest Neighbors, Decision Tree
- Регрессия: Linear Regression, SVR
- Кластеризация: k-Means, DBSCAN
- Предобработка данных: нормализация, стандартизация
- Метрики: accuracy, precision, recall, F1-score
Пример: Классификация ирисов Фишера
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);
// Предсказание для нового экземпляра (длина чашелистика, ширина чашелистика, длина лепестка, ширина лепестка)
$newSample = [5.1, 3.5, 1.4, 0.2];
$predicted = $classifier->predict($newSample);
echo "Предсказанный класс: " . $predicted; // 'Iris-setosa'
2. Rubix ML
Rubix ML — более современная и мощная библиотека. В отличие от PHP-ML, она поддерживает нейросети, градиентный бустинг, ансамблевые методы и работу с большими датасетами через генераторы (lazy evaluation).
Особенности:
- Нейронные сети (Multilayer Perceptron, CNN через конвертацию)
- Ансамбли: Random Forest, Gradient Boosted Trees
- Конвейеры обработки данных (pipelines)
- Поддержка категориальных признаков и One-Hot Encoding
- Экспорт моделей в PHP-сериализованном формате
Пример: Линейная регрессия с конвейером
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;
// Создаём датасет
$samples = [[1], [2], [3], [4], [5]];
$labels = [1.5, 2.8, 4.1, 5.9, 7.2];
$dataset = new Labeled($samples, $labels);
// Создаём конвейер
$estimator = new Pipeline([
new NumericStringConverter(),
new MinMaxNormalizer(),
], new Ridge(1.0));
$estimator->train($dataset);
// Предсказание
$prediction = $estimator->predict([[6]]);
echo "Предсказанное значение: " . $prediction[0]; // ~8.3
3. Keras PHP (TensorFlow PHP Binding)
Для работы с глубокими нейросетями на PHP можно использовать Keras PHP — обёртку над Python-библиотекой Keras/TensorFlow. Фактически это мост, который запускает Python-скрипты из PHP. Не является чистым PHP-решением, но позволяет использовать всю мощь TensorFlow.
Пример: Загрузка предобученной модели
use KerasPHP\Keras;
$keras = new Keras();
// Загружаем модель из файла .h5
$model = $keras->load_model('/path/to/model.h5');
// Подготавливаем данные (массив)
$input = [[0.5, 0.2, 0.1]];
// Предсказание
$result = $model->predict($input);
print_r($result); // Массив с вероятностями
4. PHP-ML-NeuralNetwork (расширение для PHP-ML)
Также в библиотеке
HTTP-клиент для Rust: обзор лучших библиотек (reqwest, ureq, hyper)
Генерация PDF на C++: обзор библиотек и примеры кода
PDF генерация в Kotlin: библиотеки и инструменты (iText, Apache PDFBox)
Конфигурация приложений Java: библиотеки и инструменты для управления настройками
Планировщик задач на C# (.NET): Quartz.NET, Hangfire и Coravel
Рекомендаций