機械学習プラグインは、集約関数として機械学習機能を提供します。これにより、サポートベクターマシン(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
を予測するモデルの作成を示しています。