機械学習プラグインは、集約関数として機械学習機能を提供します。これにより、サポートベクターマシン(SVM)ベースの分類器および回帰モデルを教師あり学習問題のためにトレーニングすることができます。

<aside> 💡 注意: 機械学習関数は分散処理向けに最適化されていません。大規模データセットのトレーニング能力は、最終的なトレーニングが単一インスタンスで実行されることによって制限されています。

</aside>

特徴ベクトル

機械学習技術、特に教師あり学習問題を解決するためには、データセットをラベルと特徴ベクトルのペアのシーケンスで表現する必要があります。ラベルは未知の特徴から予測したいターゲット値であり、特徴は要素が数値であるN次元ベクトルです。Trinoでは、特徴ベクトルは各特徴のインデックスをキーとするマップ型の値として表され、スパースベクトルを表現できます。分類器や回帰モデルがマップ型の特徴ベクトルを認識できるため、既存の数値から特徴を構築する関数が存在します。

SELECT features(1.0, 2.0, 3.0) AS features;

結果:

Features {0=1.0, 1=2.0, 2=3.0}

featuresからの出力は、ML関数に直接渡すことができます。

分類

分類は、与えられた特徴ベクトルから明確なラベルを予測する教師あり学習問題の一種です。このインターフェースは、Teradata AsterやBigQuery MLで実装されたラベルと特徴のペアのシーケンスからSVMモデルを構築するのに似ています。分類モデルをトレーニングするための関数は次のようになります。

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として記述できる数値である必要があります。

次のコードは、他の3つの特徴からsepal_lengthを予測するモデルの作成を示しています。