Функции машинного обучения#

Плагин машинного обучения предоставляет функциональность машинного обучения в виде агрегатных функций. Он позволяет обучать классификаторы и регрессоры на основе метода опорных векторов (SVM) для задач обучения с учителем.

Примечание

Функции машинного обучения не оптимизированы для распределенной обработки. Возможность обучения на больших наборах данных ограничена тем, что финальное обучение выполняется на одном экземпляре.

Вектор признаков#

Для решения задачи методами машинного обучения, в частности, как задачи обучения с учителем, необходимо представить набор данных в виде последовательности пар меток и векторов признаков. Метка — это целевое значение, которое нужно предсказать на основе неизвестного признака. Признак — это N-мерный вектор, элементами которого являются числовые значения. В CedrusData вектор признаков представляется как значение типа map, ключом которого является индекс каждого признака, что позволяет выражать разреженные векторы. Поскольку классификаторы и регрессоры умеют работать с вектором признаков типа map, существует функция для формирования вектора из существующих числовых значений — features():

SELECT features(1.0, 2.0, 3.0) AS features;
       features
-----------------------
 {0=1.0, 1=2.0, 2=3.0}

Результат features() можно напрямую передавать в функции машинного обучения.

Классификация#

Классификация — это тип задачи обучения с учителем, в которой необходимо предсказать дискретную метку по заданному вектору признаков. Интерфейс аналогичен построению модели SVM из последовательности пар меток и признаков, реализованному в Teradata Aster или BigQuery ML. Функция для обучения модели классификации выглядит следующим образом:

SELECT
  learn_classifier(
    species,
    features(sepal_length, sepal_width, petal_length, petal_width)
  ) AS model
FROM
  iris

Она возвращает обученную модель в сериализованном формате.

                      model
-------------------------------------------------
 3c 43 6c 61 73 73 69 66 69 65 72 28 76 61 72 63
 68 61 72 29 3e

classify() возвращает предсказанную метку с использованием обученной модели. Обученная модель не может быть сохранена нативно и должна передаваться в формате вложенного запроса:

SELECT
  classify(features(5.9, 3, 5.1, 1.8), model) AS predicted_label
FROM (
  SELECT
    learn_classifier(species, features(sepal_length, sepal_width, petal_length, petal_width)) AS model
  FROM
    iris
) t
 predicted_label
-----------------
 Iris-virginica

В результате процесс обучения необходимо запускать одновременно с предсказанием значений. Внутренне модель обучается с помощью libsvm. Для управления внутренними параметрами модели можно использовать learn_libsvm_classifier().

Регрессия#

Регрессия — это другой тип задачи обучения с учителем, в которой предсказывается непрерывное значение, в отличие от задачи классификации. Целевое значение должно быть числовым и описываться типом double.

Следующий код показывает создание модели, предсказывающей sepal_length по остальным 3 признакам:

SELECT
  learn_regressor(sepal_length, features(sepal_width, petal_length, petal_width)) AS model
FROM
  iris

Использование модели аналогично случаю классификации:

SELECT
  regress(features(3, 5.1, 1.8), model) AS predicted_target
FROM (
  SELECT
    learn_regressor(sepal_length, features(sepal_width, petal_length, petal_width)) AS model
  FROM iris
) t;
 predicted_target
-------------------
 6.407376822560477

Внутренне модель обучается с помощью libsvm. learn_libsvm_regressor() позволяет управлять процессом обучения.

Функции машинного обучения#

features(double, ...) -> map(bigint, double)#

Возвращает map, представляющий вектор признаков.

learn_classifier(label, features) Classifier#

Возвращает модель классификатора на основе SVM, обученную на заданных наборах данных меток и признаков.

learn_libsvm_classifier(label, features, params) Classifier#

Возвращает модель классификатора на основе SVM, обученную на заданных наборах данных меток и признаков. Позволяет управлять процессом обучения через параметры libsvm.

classify(features, model) label#

Возвращает метку, предсказанную заданной моделью классификатора SVM.

learn_regressor(target, features) Regressor#

Возвращает модель регрессора на основе SVM, обученную на заданных наборах данных целевых значений и признаков.

learn_libsvm_regressor(target, features, params) Regressor#

Возвращает модель регрессора на основе SVM, обученную на заданных наборах данных целевых значений и признаков. Позволяет управлять процессом обучения через параметры libsvm.

regress(features, model) target#

Возвращает предсказанное целевое значение с использованием заданной модели регрессора SVM.