通过运行
ML_TRAIN
预测任务并将其指定为 JSON 对象来生成预测。
ML_PREDICT_TABLE
然后可以预测所选列的值。
ML_SCORE
也可用于对模型质量进行评分。
您可以为具有数字数据类型的单个列创建时间序列预测。在预测方面,这是一个单变量内生变量。
当您运行
ML_TRAIN
例程来创建预测模型时,请在选项中使用以下键值对JSON_OBJECT
:
- '任务','预测'
将机器学习任务类型指定为“预测”。
- 'datetime_index', '<column_name>'
指定用作预测变量索引的日期时间列的列名称。该列可以是受支持的日期时间列类型之一(
DATETIME
、TIMESTAMP
、DATE
、TIME
和YEAR
),也可以是自动递增索引。- 'endogenous_variables', JSON_ARRAY(<endogenous_column>)
指定要预测的列。预测函数支持单个数字列。该列也必须在例程的
target_column_name
选项中 指定ML_TRAIN
,因为该字段是必需的,但在该位置未使用。
以下示例
ML_TRAIN
在ml_data.opsd_germany_daily_train
训练数据集上运行以创建预测模型以预测consumption
给定日期(列)的消耗量(ddate
列):
CALL sys.ML_TRAIN('ml_data.opsd_germany_daily_train', 'consumption', JSON_OBJECT(
'task', 'forecasting',
'datetime_index', 'ddate',
'endogenous_variables', JSON_ARRAY('consumption')),
@forecast_model);
有关使用ML_TRAIN
例程的说明,请参阅第 3.4 节“训练模型”,有关选项说明的完整列表,请参阅
ML_TRAIN
。
要生成预测,请
ML_PREDICT_TABLE
对与训练模型具有相同列的数据运行例程,但必须删除包含内生变量的列(未标记数据)。预测模型预测与标识为索引的日期时间列相关的内生变量的值。日期时间列中的数据可以与训练数据集中的数据重叠,也可以是训练数据集末尾的未来数据。
以下示例显示了正在加载并用于创建消费预测的预测模型:
mysql> CALL sys.ML_MODEL_LOAD(@forecast_model, NULL);
Query OK, 0 rows affected (1.07 sec)
mysql> CALL sys.ML_PREDICT_TABLE('ml_data.`opsd_germany_daily_test`', @forecast_model, 'ml_data.`opsd_germany_daily_train_predictions`');
Query OK, 0 rows affected (1.50 sec)
mysql> select * from opsd_germany_daily_train_predictions LIMIT 5;
+------------+---------+--------+------------+------------+
| ddate | wind | solar | wind_solar | Prediction |
+------------+---------+--------+------------+------------+
| 2017-12-01 | 52.323 | 19.266 | 71.589 | 1528.13 |
| 2017-12-02 | 126.274 | 16.459 | 142.733 | 1333.16 |
| 2017-12-03 | 387.49 | 12.411 | 399.901 | 1276.1 |
| 2017-12-04 | 479.798 | 10.747 | 490.545 | 1602.18 |
| 2017-12-05 | 611.488 | 10.953 | 622.441 | 1615.38 |
+------------+---------+--------+------------+------------+
5 rows in set (0.01 sec)
有关使用
ML_PREDICT_TABLE
例程的说明,请参阅第 3.6 节“预测”,有关选项说明的完整列表,请参阅
ML_PREDICT_TABLE
。
ML_PREDICT_ROW
不能与预测模型一起使用。
您可以使用支持的评分指标之一运行例程来对预测模型
ML_SCORE
评分,如以下示例所示:
mysql> CALL sys.ML_MODEL_LOAD(@model, NULL);
Query OK, 0 rows affected (1.07 sec)
mysql> CALL sys.ML_SCORE('ml_data.`opsd_germany_daily_test`', 'consumption', @model, 'neg_sym_mean_abs_percent_error', @score);
Query OK, 0 rows affected (1.40 sec)
mysql> select @score;
+----------------------+
| @score |
+----------------------+
| -0.07764234393835068 |
+----------------------+
1 row in set (0.00 sec)