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

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

Note

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

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

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

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

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

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

Классификация — это тип задачи обучения с учителем, в котором требуется предсказать дискретную метку на основе заданного вектора признаков. Интерфейс выглядит похоже на построение 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-моделью регрессора.