Машинное обучение на PHP: библиотеки и инструменты
Традиционно машинное обучение (ML) ассоциируется с Python, R или Julia. Однако PHP, будучи одним из самых популярных языков для веб-разработки, также имеет экосистему для реализации ML-алгоритмов. Хотя PHP не обладает такой же производительностью и обилием низкоуровневых библиотек (как NumPy или TensorFlow), для многих практических задач — классификации, регрессии, кластеризации, работы с нейросетями — существуют зрелые решения. В этой статье мы рассмотрим три основные библиотеки для машинного обучения на PHP: PHP-ML, Rubix ML и Keras-PHP.
1. PHP-ML (PHP Machine Learning)
PHP-ML — это самая популярная и стабильная библиотека для машинного обучения на PHP. Она не требует внешних зависимостей, написана полностью на PHP и предоставляет широкий спектр алгоритмов. Библиотека идеально подходит для обучения, прототипирования и интеграции ML в веб-приложения.
Основные возможности:
- Классификация: Наивный Байес, SVM (на базе LibSVM), k-ближайших соседей (k-NN), деревья решений.
- Регрессия: Линейная регрессия, регрессия с опорными векторами (SVR), k-NN регрессия.
- Кластеризация: k-средних (k-Means), DBSCAN, иерархическая кластеризация.
- Метрики оценки: Точность, полнота, F1-мера, матрица ошибок (confusion matrix).
- Предобработка данных: Нормализация, стандартизация, кодирование категориальных признаков.
Пример: обучение классификатора для определения тональности текста
use Phpml\Classification\NaiveBayes;
use Phpml\FeatureExtraction\TfIdfTransformer;
use Phpml\Tokenization\WhitespaceTokenizer;
// Обучающие данные
$samples = [
'отличный фильм',
'ужасный фильм',
'очень понравилось',
'скучно и глупо'
];
$labels = ['positive', 'negative', 'positive', 'negative'];
// Преобразование текста в числовые векторы
$tokenizer = new WhitespaceTokenizer();
$transformer = new TfIdfTransformer();
// Создаем и обучаем модель
$classifier = new NaiveBayes();
$classifier->train($samples, $labels);
// Предсказание
$prediction = $classifier->predict(['интересный сюжет']);
echo $prediction; // positive
2. Rubix ML
Rubix ML — более современная и продвинутая библиотека, ориентированная на высокую производительность и гибкость. Она поддерживает работу с большими наборами данных через генераторы (lazy loading), имеет встроенную систему пайплайнов и интеграцию с TensorFlow через NDArray. В отличие от PHP-ML, Rubix ML требует PHP 7.4+ и использует расширения типа intl и mbstring.
Ключевые особенности:
- Нейронные сети: Многослойные перцептроны (MLP) с поддержкой различных функций активации (ReLU, Sigmoid, Softmax).
- Пайплайны: Объединение нескольких шагов (нормализация, кодирование, обучение) в один конвейер.
- Работа с разреженными данными: Эффективные алгоритмы для больших матриц.
- Визуализация: Встроенные инструменты для построения графиков (через SVG).
- Сохранение и загрузка моделей: Сериализация в JSON или PHP-сериализованный формат.
Пример: регрессия для предсказания цены жилья
use Rubix\ML\Regressors\Ridge;
use Rubix\ML\Datasets\Labeled;
use Rubix\ML\Transformers\NumericStringConverter;
// Загружаем данные (предположим, CSV)
$dataset = Labeled::fromIterator(new \ArrayIterator([
['area' => 120, 'rooms' => 3, 'price' => 150000],
['area' => 80, 'rooms' => 2, 'price' => 90000],
['area' => 200, 'rooms' => 4, 'price' => 250000],
]));
// Предобработка
$dataset->apply(new NumericStringConverter());
// Обучаем модель
$estimator = new Ridge(1.0);
$estimator->train($dataset);
// Предсказание для нового объекта
$newSample = [[150