このトピックでは、Lindorm機械学習(ML)を使用してデータベース内で機械学習を実行する方法(モデルのトレーニング、モデルの推論、モデルの管理を含む)について説明します。
概要
Lindorm MLは、LindormTSDBが提供するすぐに使えるデータベース内機械学習サービスです。 Lindorm MLのプロセスには、モデルのトレーニング、モデルの推論、モデルの管理という手順が含まれます。 Lindorm MLを有効にすると、SQLステートメントを実行して、データベース内で機械学習の全プロセスを実行し、より多くのデータ値を探索できます。 Lindorm MLには、次の利点があります。
- 使いやすさ:機械学習の専門知識がなくても、標準SQLステートメントを実行して、データベース内で機械学習の全プロセスを実行できます。
- データ保持:機械学習のためにデータを外部プラットフォームにエクスポートする必要はありません。 これにより、機械学習の効率が向上し、データが規制要件を満たすのに役立ちます。
- エンタープライズ機能:Lindorm MLでは、モデルとデータはどちらもデータベースに保存されます。 したがって、権限管理、データ監査、データ暗号化など、データベースに提供されるエンタープライズ機能を機械学習で使用できます。
Lindorm MLを有効にする
Lindorm MLを有効にする方法の詳細については、「Lindorm MLを有効にする」をご参照ください。
モデルのトレーニング
Lindorm MLでモデルをトレーニングする場合、モデルで実行する必要があるタスクのタイプを指定する必要があります。 Lindorm MLは、さまざまなタイプのタスクにさまざまなアルゴリズムを提供します。 データベースで拡張CREATE MODELステートメントを使用して、モデルをトレーニングできます。
構文
CREATE MODEL model_name
FROM { table_name | (select_statement) }
[ TARGET column_name ]
TASK ( TIME_SERIES_FORECAST | TIME_SERIES_ANOMALY_DETECTION )
ALGORITHM ( DEEPAR | TFT | esd | nsigma | ttest )
[ PREPROCESSORS 'string' ]
SETTINGS (
EPOCHS integer,
...
)パラメーター
- model_name: モデルの名前。 モデル名は、スキーマ内で一意です。
- FROM { table_name | (select_statement) }: モデルのトレーニングに使用されるデータを含むテーブルの名前、またはクエリステートメント。 ステートメントの結果には少なくとも2つの列が含まれている必要があり、列の1つは時間列である必要があります。
- TARGET column_name: 時系列予測または時系列異常検出のターゲットを指定するために使用される列の名前。
- TASK: モデルで実行する必要があるタスクのタイプ。 次の表に、Lindorm MLでサポートされているタスクタイプを示します。
タスクタイプ キーワード 時系列予測 TIME_SERIES_FORECAST 時系列異常検出 TIME_SERIES_ANOMALY_DETECTION - ALGORITHM: モデルで使用されるアルゴリズム。 次の表に、Lindorm MLでサポートされているアルゴリズムを示します。
タスクタイプ アルゴリズム 説明 時系列予測 DeepAR DeepARアルゴリズムは、リカレントニューラルネットワーク(RNN)に基づくディープニューラルネットワークアルゴリズムです。 詳細については、関連論文を参照してください。 TFT Temporal Fusion Transformer(TFT)アルゴリズムは、Transformerメカニズムに基づくディープニューラルネットワークアルゴリズムです。 詳細については、関連論文を参照してください。 時系列異常検出 esd このアルゴリズムはAlibaba DAMO Academyによって開発されたもので、監視曲線のスパイクや少数のデータポイントが他のデータポイントと大きく異なるシナリオなど、スパイク状の異常検知に適用できます。 詳細については、「時系列異常検出」をご参照ください。 nsigma このアルゴリズムはAlibaba DAMO Academyによって開発されました。 シンプルで、異常の原因を分析しやすいです。 詳細については、「時系列異常検出」をご参照ください。 ttest このアルゴリズムはAlibaba DAMO Academyによって開発されました。 平均値の変化によって時系列データに関連するメトリックが異常かどうかを識別するために使用されます。 詳細については、「時系列異常検出」をご参照ください。 - PREPROCESSORS 'string': 特定の列の前処理操作。 このパラメーターはオプションです。 一般に、前処理操作はJSON文字列で指定されます。
PREPROCESSORSパラメーターの値には、前処理が必要な列を示すColumnsと、実行する前処理操作を示すTransformersの2つのコンポーネントが含まれています。 Transformersで指定された操作は、指定された順序で実行されます。 各Transformersコンポーネントには、前処理操作の名前を指定するNameと、前処理操作に関連するパラメーターを指定するParametersの2つのフィールドが含まれています。 次の例は、PREPROCESSORSパラメーターのサンプル値を示しています。
PREPROCESSORS '[ { "Columns":[ "c1" ], "Transformers":[ { "Name": "Imputer", "Parameters": {"value": 0} }, { "Name": "StandardScaler" } ] }, { "Columns":[ "c2", "c3" ], "Transformers":[ { "Name": "OrdinalEncoder" } ] } ]'説明 PREPROCESSORSパラメーターの値では、ColumnsコンポーネントとParametersフィールドはどちらもオプションです。モデルのトレーニング中に指定された前処理操作は、モデルの推論で自動的に実行されます。 次の表に、Lindorm MLでサポートされている前処理操作を示します。
前処理操作 パラメーター 説明 OneHotEncoder なし カテゴリ機能をバイナリ値にエンコードします。 この操作は、サイズを比較できないカテゴリ機能に適用できます。 OrdinalEncoder なし カテゴリ機能を0からの整数にエンコードします。 この操作は、サイズを比較できるカテゴリ機能に適用できます。 Imputer - method: 補間方法を示す文字列。 有効な値:dummy、mean、median、most_frequent、roll7、last。 デフォルト値:dummy。
- value: 補間する必要がある整数。 デフォルト値:0。 このパラメーターはオプションです。
欠損値を補間します。 複数の補間ポリシーを選択できます。 StandardScaler なし データを、平均0、標準偏差1の標準正規分布に従う値に変換します。 この操作は、zスコア正規化とも呼ばれます。 MinMaxScaler - min: 範囲の最小値を示す整数。
- max: 範囲の最大値を示す整数。 このパラメーターはオプションです。
データを範囲(min、max)にスケーリングします。 デフォルトでは、値の範囲は(0,1)です。 LogTransformer なし 値を対数に変換します。 - SETTINGS: 設定できるその他のパラメーター。 タスクタイプごとに異なるパラメーターを指定できます。 次の表に、Lindorm MLでサポートされているパラメーターを示します。
時系列予測に関連するパラメーター
パラメーター タイプ 説明 必須 epochs INTEGER モデルのトレーニングのエポック数。 このパラメーターは、時系列予測にのみ適用できます。 デフォルト値:80 はい time_column VARCHAR 時間列。 はい group_columns VARCHAR グループ列。 この列は、時系列を決定するためのTAG列として使用されます。 はい freq VARCHAR 時系列データの頻度。 例:1D。 はい prediction_length INTEGER 時系列予測のステップサイズ。 はい feat_static_columns VARCHAR 静的特徴列のセット。 複数の列はコンマ(,)で区切ります。 いいえ 時系列異常検出に関連するパラメーター。
時系列異常検出でサポートされているトレーニングパラメーターの詳細については、「時系列異常検出」をご参照ください。
例
CREATE MODEL tft_model
FROM (SELECT * FROM fresh_sales WHERE `time` > '2021-02-08T00:00:00+08:00')
TARGET sales
TASK time_series_forecast
ALGORITHM tft
SETTINGS
(
time_column 'time',
group_columns 'id_code',
feat_static_columns 'cate1_id,cate2_id,brand_id',
context_length '28',
prediction_length '6',
epochs '5',
freq '1D'
);モデル管理
CREATE MODELステートメントが実行された後、SQLステートメントを実行して、モデルがReady状態かどうかを確認できます。
データベース内のすべてのモデルに関する情報を表示する
SHOW MODELSステートメントを使用して、データベース内のすべてのモデルに関する基本情報を表示できます。
次のステートメントは、データベース内のすべてのモデルに関する情報を表示する方法の例を示しています。
SHOW MODELS;次の情報が返されます。
+-------------------+--------+--------------------+-------------------------------+-------------------------------+
| name | status | sql_function | created_time | update_time |
+-------------------+--------+--------------------+-------------------------------+-------------------------------+
| tft_model | Ready | forecast | 2022-11-04T11:38:05.873+08:00 | 2022-11-04T11:39:14.046+08:00 |
+-------------------+--------+--------------------+-------------------------------+-------------------------------+
1 rows in set (524 ms)次の表に、返される値を示します。
| 戻り値 | 説明 |
| name | モデルの名前。 |
| status | モデルの状態。 有効な値:Init、Training、Ready、Failed。 Init値は、モデルが初期化されていることを示します。 Training値は、モデルがトレーニングされていることを示します。 Ready値は、モデルがトレーニングされていることを示します。 Failed値は、モデルのトレーニングに失敗したことを示します。 |
| sql_function | 推論関数。 |
| created_time | モデルが作成された時刻。 |
| update_time | モデルが最後に更新された時刻。 |
指定されたモデルに関する情報を表示する
SHOW MODEL model_nameステートメントを使用して、指定されたモデルに関する詳細情報を表示できます。
次のステートメントは、指定されたモデルに関する詳細情報を表示する方法の例を示しています。
SHOW MODEL tft_model;次の情報が返されます。
+-----------+--------+--------------+----------------------+-----------+------------------------------------+---------------+-------------------------------------------------+--------------------------------+-------------------------------+-------------------------------+
| name | status | sql_function | task_type | algorithm | query | preprocessors | settings | metrics | created_time | update_time |
+-----------+--------+--------------+----------------------+-----------+------------------------------------+---------------+-------------------------------------------------+--------------------------------+-------------------------------+-------------------------------+
| tft_model | Ready | forecast | TIME_SERIES_FORECAST | TFT | SELECT `time`, FIRST(`sales`) AS | [] | {time_column=time, group_columns=id_code, | {MAPE=0.35002756118774414, | 2022-11-04T11:38:05.873+08:00 | 2022-11-04T11:39:14.046+08:00 |
| | | | | | `sales`, `id_code`, `cate1_id`, | | feat_static_columns=cate1_id,cate2_id,brand_id, | MASE=0.41281554008773325, | | |
| | | | | | `cate2_id`, `brand_id` FROM | | context_length=28, prediction_length=6, | MSE=456.3769938151042} | | |
| | | | | | `fresh_sales` WHERE `time` > | | epochs=5, freq=1D,train_mode=LOCAL, | | | |
| | | | | | '2021-02-08T00:00:00+08:00' | | past_length=28, | | | |
| | | | | | sample by 1D fill zero | | forecast_start=2022-07-31 08:00:00} | | | |
+-----------+--------+--------------+----------------------+-----------+------------------------------------+---------------+-------------------------------------------------+--------------------------------+-------------------------------+-------------------------------+
1 rows in set (334 ms)次の表に、返される値を示します。
| 戻り値 | 説明 |
| task_type | モデルで実行する必要があるタスクのタイプ。 |
| algorithm | モデルで使用されるアルゴリズムの名前。 |
| query | モデルのトレーニングに使用されるクエリステートメント。 |
| preprocessors | 前処理操作の構文。 |
| settings | モデルに関連するパラメーター。 |
| metrics | モデルのメトリック。 |
指定されたモデルを削除する
DROP MODEL model_nameステートメントを使用して、指定されたモデルを削除できます。
次のステートメントは、指定されたモデルを削除する方法の例を示しています。
DROP MODEL tft_model;次の情報が返されます。
No rows affected (0.397 seconds)モデル推論
モデルがReady状態の場合、システム関数を使用してモデル推論を実行できます。 タスクのタイプごとに異なる関数を使用できます。
構文
SELECT function_name(field_name, model_name, params) FROM table_name [WHERE clause] SAMPLE BY 0;例
SELECT device_id, region, `time`, raw(temperature) as temperature, anomaly_detect(temperature, ad_model) as detect_result from sensor WHERE time >= '2022-01-01 00:00:00' and time < '2022-01-01 00:01:00' SAMPLE BY 0;