Реализация машинного обучения с использованием библиотеки PHP-ML
Обучение на основе языковых кодов
require_once 'vendor/autoload.php';
use Phpml\Classification\SVC;
use Phpml\SupportVectorMachine\Kernel;
/*
Метод k-ближайших соседей (k-Nearest Neighbors algorithm, KNN алгоритм) — это метод классификации и регрессии в области непараметрической статистики.
k-NN классификация
Вход: набор k наиболее близких тренировочных образцов в пространстве признаков.
Выход: классификационная группа.
k-NN регрессия
Вход: набор k наиболее близких тренировочных образцов в пространстве признаков.
Выход: значение атрибута объекта. Это среднее значение значений его k ближайших соседей.
*/
use Phpml\Classification\KNearestNeighbors;
/*
Классификация на основе теоремы Байеса (naive) с мощной гипотезой независимости между характеристиками
*/
use Phpml\Classification\NaiveBayes;
/*
Предположим, что в классе есть три мальчика (мальчик 1, мальчик 2, мальчик 3) и три девочки (девочка 1, девочка 2, девочка 3),
где
мальчик 1: рост 176 см, вес 70 кг;
мальчик 2: рост 180 см, вес 80 кг;
мальчик 3: рост 186 см, вес 86 кг;
девочка 1: рост 161 см, вес 45 кг;
девочка 2: рост 163 см, вес 47 кг;
девочка 3: рост 165 см, вес 49 кг;
Если мы определим мальчиков как 1, а девочек как -1 (значения здесь не важны, можно определить мальчиков как 8, девочек как 6, главное, чтобы были числами)
*//* Вводим данные выше в массив $samples */
$samples = [[176, 70], [180, 80], [161, 45], [163, 47], [186, 86], [165, 49]];
/*
Сохраняем метки классов (1, -1) в массиве labels
*/
$labels = [1, 1, -1, -1, 1, -1];
/*
Теперь используем libsvm для поддержки векторной машиной классификации
Далее используем линейную классификацию
*/
$classifier = new SVC(Kernel::LINEAR, $cost = 1000);
/* Обучаем классификатор */
$classifier->train($samples, $labels);
/*
Теперь используем метод ближайшего соседа для реализации классификации
*/
$classifier = new KNearestNeighbors();
$classifier->train($samples, $labels);
/*
Теперь используем метод Байеса для реализации классификации
*/```php
$classifier = new NaiveBayes();
$classifier->train($samples, $labels);
/* Предсказание */
echo $classifier->predict([190, 85]);
// вернет 1, что указывает на мальчика
print_r($classifier->predict([[152, 44], [176, 78]]));
// возвращает [-1, 1], где -1 — представительница женского пола, а 1 — представитель мужского пола
exit;
require_once 'vendor/autoload.php';
use Phpml\Association\Apriori;
/*
В интернет-магазине было проведено исследование покупательских пристрастий шести пользователей:
Пользователь A любит покупать одежду, обувь и чипсы;
Пользователь B любит покупать чипсы, макароны и матрас;
Пользователь C любит покупать одежду, матрас и макароны;
Пользователь D любит покупать одежду, макароны и обувь;
Пользователь E любит покупать одежду, макароны и чипсы;
Пользователь F любит покупать одежду, обувь и чипсы.
*/
/* Данные помещаются в массив $samples
*/
$samples = [
['одежда', 'обувь', 'чипсы'],
['чипсы', 'макароны', 'матрас'],
['одежда', 'матрас', 'макароны'],
['одежда', 'макароны', 'обувь'],
['одежда', 'макароны', 'чипсы'],
['одежда', 'обувь', 'чипсы']
];
$labels = [];
/*
Параметры:
support — уровень поддержки,
confidence — уверенность.
*/
$associator = new Apriori($support = 0.5, $confidence = 0.5);
/* Обучение модели
*/
$associator->train($samples, $labels);
/*
Предположим, что есть еще один пользователь G, который приобрел одежду.
Интернет-магазин хочет рекомендовать клиенту дополнительные товары, чтобы увеличить объём продаж.
Система использует данные обучения, чтобы предсказать, какие товары могут заинтересовать пользователя G.
*/
print_r($associator->predict(['одежда']));
// вернет Array ( [0] => Array ( [0] => обувь ) [1] => Array ( [0] => чипсы ) [2] => Array ( [0] => макароны ) )
/*
Заключение: этот алгоритм позволяет прогнозировать следующее действие на основе наблюдаемых поведенческих моделей.
*/
### Учебный пример использования метода регрессии
require_once 'vendor/autoload.php';
use Phpml\Regression\LeastSquares;
use Phpml\Regression\SVR;
/*
Мы хотим спрогнозировать цену акций компании Zhang.
Цена одной акции компании Zhang с 2010 года:
2010 год — 123.5$;
2011 год — 124.5$;
2012 год — 134.5$;
2013 год — 144$;
2014 год — 144.7$;
2015 год — 154.5$;
2016 год — 184.5$.
На основании ежегодной динамики изменения цены акций мы рассчитали процент изменения:
2010 год — +1.1%;
2011 год — +1.2%;
2012 год — +2.1%;
2013 год — +3.1%;
2014 год — +3.3%;
2015 год — +4.1%;
2016 год — +5.1%.
*/
/* Данные помещаются в массив $samples
*/
$samples = [[2010], [2011], [2012], [2013], [2014], [2015], [2016]];
/*
Процент изменения цен на акции записывается в массив $labels
*/
$labels = [1.1, 1.2, 2.1, 3.1, 3.3, 4.1, 5.1];
/*
Далее мы используем метод наименьших квадратов для аппроксимации линейной модели для прогнозирования.
*/
$regression = new LeastSquares();
```Далее мы используем векторную регрессию из libsvm для прогнозирования.
```php
$regression = new SVR(Kernel::LINEAR);
Обучаем модель
$regression->train($samples, $labels);
Если мы хотим узнать, как будет меняться цена акций Zhang氏 в 2017 году, мы используем метод наименьших квадратов для аппроксимации линейной модели для прогнозирования.
print_r($regression->predict([2017]));
// выводит 5.53667
Результат нашего прогнозирования составляет увеличение на 5.53%. Этот пример использует алгоритм регрессии методом наименьших квадратов и векторную регрессию для прогнозирования.
github: https://github.com/qieangel2013/phpml
гитлаб: https://gitee.com/qieangel2013/phpml
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )