创建数据框分析任务 API

编辑

实例化一个数据框分析任务。

请求

编辑

PUT _ml/data_frame/analytics/<data_frame_analytics_id>

先决条件

编辑

需要以下权限

  • 集群:manage_mlmachine_learning_admin 内置角色授予此权限)
  • 源索引:readview_index_metadata
  • 目标索引:readcreate_indexmanageindex

数据框分析任务会记住创建它时用户拥有的角色。当你启动任务时,它会使用相同的角色执行分析。如果你提供辅助授权标头,则会使用这些凭据。

描述

编辑

此 API 创建一个数据框分析任务,该任务对源索引执行分析并将结果存储在目标索引中。

如果目标索引不存在,则在启动任务时会自动创建。请参阅启动数据框分析任务

如果你只提供回归或分类参数的子集,则会进行超参数优化。它会为每个未定义的参数确定一个值。

路径参数

编辑
<data_frame_analytics_id>
(必需,字符串)数据框分析任务的标识符。此标识符可以包含小写字母数字字符(a-z 和 0-9)、连字符和下划线。它必须以字母数字字符开头和结尾。

请求正文

编辑
allow_lazy_start
(可选,布尔值)指定当没有足够的机器学习节点容量立即将其分配给节点时,此任务是否可以启动。默认值为 false;如果无法立即找到具有运行任务容量的机器学习节点,则 API 返回错误。但是,这也受集群范围的 xpack.ml.max_lazy_ml_nodes 设置的约束。请参阅高级机器学习设置。如果此选项设置为 true,则 API 不会返回错误,并且任务会在 starting 状态等待,直到有足够的机器学习节点容量可用。
analysis

(必需,对象)分析配置,其中包含执行以下分析类型之一所需的信息:分类、异常检测或回归。

analysis 的属性
classification

(必需*,对象)执行分类所需的配置信息。

高级参数用于微调分类分析。它们由超参数优化自动设置,以给出最小的验证误差。强烈建议使用默认值,除非你完全了解这些参数的功能。

classification 的属性
alpha
(可选,双精度)高级配置选项。机器学习使用损失引导树生长,这意味着决策树在正则化损失减少最快的地方生长。此参数通过充当树深度的乘数来影响损失计算。较高的 alpha 值会导致较浅的树和更快的训练时间。默认情况下,此值在超参数优化期间计算。它必须大于或等于零。
class_assignment_objective
(可选,字符串)定义分配类标签时要优化的目标:maximize_accuracymaximize_minimum_recall。当最大化准确性时,会选择类标签以最大化正确预测的数量。当最大化最小召回率时,会选择标签以最大化任何类别的最小召回率。默认为 maximize_minimum_recall
dependent_variable

(必需,字符串)

定义要预测的文档的哪个字段。此参数由字段名称提供,并且必须与用于训练的索引中的字段之一匹配。如果文档中缺少此字段,则该文档将不用于训练,但会为其生成使用训练模型的预测。它也称为连续目标变量。

该字段的数据类型必须是数值型(integershortlongbyte)、类别型(ipkeyword)或布尔型。此字段中不能超过 100 个不同的值。

downsample_factor
(可选,双精度)高级配置选项。控制用于计算树训练损失函数导数的数据部分。较小的值会导致使用一小部分数据。如果此值设置为小于 1,则准确性通常会提高。但是,太小的值可能会导致集成模型的收敛性较差,因此需要更多的树。有关收缩的更多信息,请参阅此维基文章。默认情况下,此值在超参数优化期间计算。它必须大于零且小于或等于 1。
early_stopping_enabled
(可选,布尔值)高级配置选项。指定如果训练过程没有找到任何性能更好的模型,是否应该完成训练过程。如果禁用,训练过程可能会花费更长的时间,并且找到性能更好模型的可能性不大。默认情况下,启用提前停止。
eta
(可选,双精度)高级配置选项。应用于权重的收缩。较小的值会导致更大的森林,从而具有更好的泛化误差。但是,较大的森林会导致较慢的训练。有关收缩的更多信息,请参阅此维基文章。默认情况下,此值在超参数优化期间计算。它必须是 0.001 到 1 之间的值。
eta_growth_rate_per_tree
(可选,双精度)高级配置选项。指定为添加到森林的每棵新树 eta 增加的速率。例如,1.05 的速率会使每棵额外的树的 eta 增加 5%。默认情况下,此值在超参数优化期间计算。它必须介于 0.5 和 2 之间。
feature_bag_fraction
(可选,双精度)高级配置选项。定义在为每个候选拆分选择随机包时将使用的特征部分。默认情况下,此值在超参数优化期间计算。
feature_processors

(可选,列表)高级配置选项。修改一个或多个包含字段的特征预处理器集合。分析使用产生的一个或多个特征而不是原始文档字段。但是,这些特征是临时的;它们不会存储在目标索引中。多个 feature_processors 条目可以引用相同的文档字段。对于未被自定义处理器处理或具有类别值的字段,仍然会发生自动类别特征编码。仅当你想覆盖指定字段的自动特征编码时才使用此属性。请参阅数据框分析特征处理器以了解更多信息。

feature_processors 的属性
frequency_encoding

(对象)执行频率编码所需的配置信息。

frequency_encoding 的属性
feature_name
(必需,字符串)生成的特征名称。
field
(必需,字符串)要编码的字段的名称。
frequency_map
(必需,对象)该字段值的生成的频率映射。如果 frequency_map 中缺少字段值,则生成的值为 0
multi_encoding

(对象)执行多重编码所需的配置信息。它允许一起更改多个处理器。这样,一个处理器的输出可以作为输入传递给另一个处理器。

multi_encoding 的属性
processors
(必需,数组)要执行的自定义处理器的有序数组。必须大于 1。
n_gram_encoding

(对象)执行 n 元语法编码所需的配置信息。此编码器创建的特征具有以下名称格式:<feature_prefix>.<ngram><string position>。例如,如果 feature_prefixf,则字符串中第二个单字符的特征名称为 f.11

n_gram_encoding 的属性
feature_prefix
(可选,字符串)特征名称前缀。默认为 ngram_<start>_<length>
field
(必需,字符串)要编码的文本字段的名称。
length
(可选,整数)指定 n 元语法子字符串的长度。默认为 50。必须大于 0
n_grams
(必需,数组)指定要收集的 n 元语法。它是整数值的数组,其中最小值为 1,最大值为 5。
start
(可选,整数)指定 n 元语法子字符串的从零开始的起始位置。允许使用负值来编码字符串后缀的 n 元语法。默认为 0
one_hot_encoding

(对象)执行独热编码所需的配置信息。

one_hot_encoding 的属性
field
(必需,字符串)要编码的字段的名称。
hot_map
(必需,字符串)将字段值映射到列名称的独热映射。
target_mean_encoding

(对象) 执行目标均值编码所需的配置信息。

target_mean_encoding 的属性
default_value
(必需,整数) 如果在 target_map 中未找到字段值,则使用的默认值。
feature_name
(必需,字符串)生成的特征名称。
field
(必需,字符串)要编码的字段的名称。
target_map
(必需,对象) 字段值到目标均值的转换映射。
gamma
(可选,双精度浮点数) 高级配置选项。用于防止在训练数据集上过拟合的正则化参数。与森林中单个树的大小相关的线性惩罚相乘。较高的 gamma 值会导致训练偏向于小型树。较小的 gamma 值会导致较大的单个树和较慢的训练速度。默认情况下,此值在超参数优化期间计算。它必须是非负值。
lambda
(可选,双精度浮点数) 高级配置选项。用于防止在训练数据集上过拟合的正则化参数。乘以应用于森林中单个树的叶权重的 L2 正则化项。较高的 lambda 值会导致训练偏向于较小的叶权重。此行为使预测函数更平滑,但可能会以无法捕获特征和因变量之间相关关系为代价。较小的 lambda 值会导致较大的单个树和较慢的训练速度。默认情况下,此值在超参数优化期间计算。它必须是非负值。
max_optimization_rounds_per_hyperparameter
(可选,整数) 高级配置选项。一个乘数,负责确定贝叶斯优化过程中超参数优化的最大步数。最大步数是根据未定义的超参数的数量乘以每个超参数的最大优化轮数确定的。默认情况下,此值在超参数优化期间计算。
max_trees
(可选,整数) 高级配置选项。定义森林中决策树的最大数量。最大值为 2000。默认情况下,此值在超参数优化期间计算。
num_top_classes

(可选,整数) 定义报告预测概率的类别数量。它必须是非负数或 -1。如果它是 -1 或大于类别总数,则报告所有类别的概率;如果您有大量的类别,则可能会对目标索引的大小产生重大影响。默认为 2。

要使用 AUC ROC 评估方法,num_top_classes 必须设置为 -1 或大于或等于类别总数的值。

num_top_feature_importance_values
(可选,整数) 高级配置选项。指定每个文档要返回的最大特征重要性值数量。默认情况下,它为零,并且不进行特征重要性计算。
prediction_field_name
(可选,字符串) 定义结果中预测字段的名称。默认为 <dependent_variable>_prediction
randomize_seed
(可选,长整型) 定义用于选择训练数据的随机生成器的种子。默认情况下,它是随机生成的。将其设置为特定值,以便每次开始作业时都使用相同的训练数据(假设其他相关参数(例如 sourceanalyzed_fields)相同)。
soft_tree_depth_limit
(可选,双精度浮点数) 高级配置选项。机器学习使用损失引导树生长,这意味着决策树在正则化损失下降最快的地方生长。此软限制与 soft_tree_depth_tolerance 结合使用,以惩罚超出指定深度的树;正则化损失在此深度之后会迅速增加。默认情况下,此值在超参数优化期间计算。它必须大于或等于 0。
soft_tree_depth_tolerance
(可选,双精度浮点数) 高级配置选项。此选项控制当树深度超过 soft_tree_depth_limit 时,正则化损失增加的速度。默认情况下,此值在超参数优化期间计算。它必须大于或等于 0.01。
training_percent
(可选,整数) 定义用于训练的符合条件的文档的百分比。分析忽略的文档(例如,包含多个值的数组的文档)将不包含在使用百分比的计算中。默认为 100
outlier_detection

(必需*,对象) 执行异常值检测所需的配置信息

outlier_detection 的属性
compute_feature_influence
(可选,布尔值) 指定是否启用特征影响计算。默认为 true
feature_influence_threshold
(可选,双精度浮点数) 文档需要具有的最小异常值分数,才能计算其特征影响分数。值范围:0-1(默认为 0.1)。
method
(可选,字符串) 异常值检测使用的方法。可用的方法有 lofldofdistance_kth_nndistance_knnensemble。默认值为 ensemble,这意味着异常值检测使用不同方法的集合,并对它们的单个异常值分数进行归一化和组合,以获得总体异常值分数。
n_neighbors
(可选,整数) 定义每个异常值检测方法用于计算其异常值分数的最近邻居数量的值。如果未设置该值,则不同的集合成员将使用不同的值。此默认行为有助于提高集合的多样性;仅当您确信您选择的值适合数据集时才覆盖它。
outlier_fraction
(可选,双精度浮点数) 假设在异常值检测之前是异常值的数据集比例。例如,0.05 表示假设 5% 的值是真正的异常值,而 95% 是内点。
standardization_enabled
(可选,布尔值) 如果为 true,则在计算异常值分数之前对列执行以下操作:(x_i - mean(x_i)) / sd(x_i)。默认为 true。有关此概念的更多信息,请参见 维基百科
regression

(必需*,对象) 执行回归所需的配置信息。

高级参数用于微调回归分析。它们由超参数优化自动设置,以给出最小的验证误差。强烈建议使用默认值,除非您完全了解这些参数的功能。

regression 的属性
alpha
(可选,双精度)高级配置选项。机器学习使用损失引导树生长,这意味着决策树在正则化损失减少最快的地方生长。此参数通过充当树深度的乘数来影响损失计算。较高的 alpha 值会导致较浅的树和更快的训练时间。默认情况下,此值在超参数优化期间计算。它必须大于或等于零。
dependent_variable

(必需,字符串)

定义要预测的文档的哪个字段。此参数由字段名称提供,并且必须与用于训练的索引中的字段之一匹配。如果文档中缺少此字段,则该文档将不用于训练,但会为其生成使用训练模型的预测。它也称为连续目标变量。

该字段的数据类型必须为数值型。

downsample_factor
(可选,双精度)高级配置选项。控制用于计算树训练损失函数导数的数据部分。较小的值会导致使用一小部分数据。如果此值设置为小于 1,则准确性通常会提高。但是,太小的值可能会导致集成模型的收敛性较差,因此需要更多的树。有关收缩的更多信息,请参阅此维基文章。默认情况下,此值在超参数优化期间计算。它必须大于零且小于或等于 1。
early_stopping_enabled
(可选,布尔值)高级配置选项。指定如果训练过程没有找到任何性能更好的模型,是否应该完成训练过程。如果禁用,训练过程可能会花费更长的时间,并且找到性能更好模型的可能性不大。默认情况下,启用提前停止。
eta
(可选,双精度)高级配置选项。应用于权重的收缩。较小的值会导致更大的森林,从而具有更好的泛化误差。但是,较大的森林会导致较慢的训练。有关收缩的更多信息,请参阅此维基文章。默认情况下,此值在超参数优化期间计算。它必须是 0.001 到 1 之间的值。
eta_growth_rate_per_tree
(可选,双精度)高级配置选项。指定为添加到森林的每棵新树 eta 增加的速率。例如,1.05 的速率会使每棵额外的树的 eta 增加 5%。默认情况下,此值在超参数优化期间计算。它必须介于 0.5 和 2 之间。
feature_bag_fraction
(可选,双精度)高级配置选项。定义在为每个候选拆分选择随机包时将使用的特征部分。默认情况下,此值在超参数优化期间计算。
feature_processors
(可选,列表)高级配置选项。修改一个或多个包含字段的特征预处理器集合。分析使用产生的一个或多个特征而不是原始文档字段。但是,这些特征是临时的;它们不会存储在目标索引中。多个 feature_processors 条目可以引用相同的文档字段。对于未被自定义处理器处理或具有类别值的字段,仍然会发生自动类别特征编码。仅当你想覆盖指定字段的自动特征编码时才使用此属性。请参阅数据框分析特征处理器以了解更多信息。
gamma
(可选,双精度浮点数) 高级配置选项。用于防止在训练数据集上过拟合的正则化参数。与森林中单个树的大小相关的线性惩罚相乘。较高的 gamma 值会导致训练偏向于小型树。较小的 gamma 值会导致较大的单个树和较慢的训练速度。默认情况下,此值在超参数优化期间计算。它必须是非负值。
lambda
(可选,双精度浮点数) 高级配置选项。用于防止在训练数据集上过拟合的正则化参数。乘以应用于森林中单个树的叶权重的 L2 正则化项。较高的 lambda 值会导致训练偏向于较小的叶权重。此行为使预测函数更平滑,但可能会以无法捕获特征和因变量之间相关关系为代价。较小的 lambda 值会导致较大的单个树和较慢的训练速度。默认情况下,此值在超参数优化期间计算。它必须是非负值。
loss_function
(可选,字符串) 回归期间使用的损失函数。可用选项包括 mse(均方误差)、msle(均方对数误差)、huber(伪 Huber 损失)。默认为 mse。请参阅回归分析的损失函数以了解更多信息。
loss_function_parameter
(可选,双精度浮点数) 用作 loss_function 参数的正数。
max_optimization_rounds_per_hyperparameter
(可选,整数) 高级配置选项。一个乘数,负责确定贝叶斯优化过程中超参数优化的最大步数。最大步数是根据未定义的超参数的数量乘以每个超参数的最大优化轮数确定的。默认情况下,此值在超参数优化期间计算。
max_trees
(可选,整数) 高级配置选项。定义森林中决策树的最大数量。最大值为 2000。默认情况下,此值在超参数优化期间计算。
num_top_feature_importance_values
(可选,整数) 高级配置选项。指定每个文档要返回的最大特征重要性值数量。默认情况下,它为零,并且不进行特征重要性计算。
prediction_field_name
(可选,字符串) 定义结果中预测字段的名称。默认为 <dependent_variable>_prediction
randomize_seed
(可选,长整型) 定义用于选择训练数据的随机生成器的种子。默认情况下,它是随机生成的。将其设置为特定值,以便每次开始作业时都使用相同的训练数据(假设其他相关参数(例如 sourceanalyzed_fields)相同)。
soft_tree_depth_limit
(可选,双精度浮点数) 高级配置选项。机器学习使用损失引导树生长,这意味着决策树在正则化损失下降最快的地方生长。此软限制与 soft_tree_depth_tolerance 结合使用,以惩罚超出指定深度的树;正则化损失在此深度之后会迅速增加。默认情况下,此值在超参数优化期间计算。它必须大于或等于 0。
soft_tree_depth_tolerance
(可选,双精度浮点数) 高级配置选项。此选项控制当树深度超过 soft_tree_depth_limit 时,正则化损失增加的速度。默认情况下,此值在超参数优化期间计算。它必须大于或等于 0.01。
training_percent
(可选,整数) 定义用于训练的符合条件的文档的百分比。分析忽略的文档(例如,包含多个值的数组的文档)将不包含在使用百分比的计算中。默认为 100
analyzed_fields

(可选,对象) 指定 includes 和/或 excludes 模式以选择将包含在分析中的字段。excludes 中指定的模式最后应用,因此 excludes 优先。换句话说,如果同一个字段在 includesexcludes 中都指定了,则该字段将不包含在分析中。

每种分析类型支持的字段如下

  • 异常值检测需要数值或布尔数据进行分析。这些算法不支持缺失值,因此会忽略数据类型不是数值或布尔值的字段。还会忽略包含缺失值、空值或数组的包含字段的文档。因此,dest 索引可能包含没有异常值分数的文档。
  • 回归支持数值、booleantextkeywordip 字段。它也可以容忍缺失值。支持的字段会包含在分析中,其他字段会被忽略。还会忽略包含两个或多个值的数组的包含字段的文档。dest 索引中不包含结果字段的文档不会包含在回归分析中。
  • 分类支持数值、booleantextkeywordip 字段。它也可以容忍缺失值。支持的字段会包含在分析中,其他字段会被忽略。还会忽略包含两个或多个值的数组的包含字段的文档。dest 索引中不包含结果字段的文档不会包含在分类分析中。可以通过将序数变量值映射到单个数字来改进分类分析。例如,对于年龄范围,您可以将值建模为 "0-14" = 0, "15-24" = 1, "25-34" = 2, 等等。

如果未设置 analyzed_fields,则仅包含相关字段。例如,异常值检测的所有数字字段。有关字段选择的更多信息,请参见 解释数据帧分析

analyzed_fields 的属性
excludes
(可选,数组)一个字符串数组,用于定义将从分析中排除的字段。您无需将具有不支持数据类型的字段添加到 excludes 中,这些字段会自动从分析中排除。
includes
(可选,数组)一个字符串数组,用于定义将包含在分析中的字段。
description
(可选,字符串)作业的描述。
dest

(必需,对象)目标配置,由 index 和可选的 results_field (默认为 ml)组成。

dest 的属性
index
(必需,字符串)定义存储数据帧分析作业结果的目标索引
results_field
(可选,字符串)定义存储分析结果的字段名称。默认为 ml
max_num_threads
(可选,整数)分析使用的最大线程数。默认值为 1。使用更多线程可能会减少完成分析所需的时间,但会增加 CPU 的使用量。请注意,该进程可能会使用额外的线程进行分析本身之外的操作功能。
_meta
(可选,对象)高级配置选项。包含有关作业的自定义元数据。例如,它可以包含自定义 URL 信息。
model_memory_limit
(可选,字符串)允许用于分析处理的近似最大内存资源量。数据帧分析作业的默认值为 1gb。如果您为 xpack.ml.max_model_memory_limit 设置指定一个值,当您尝试创建具有大于该设置值的 model_memory_limit 值的作业时,会发生错误。有关更多信息,请参阅 机器学习设置
source

(对象)如何获取分析数据的配置。它需要一个 index。可选地,可以指定 queryruntime_mappings_source

source 的属性
index

(必需,字符串或数组)执行分析的索引或多个索引。它可以是单个索引或索引模式,也可以是索引或模式的数组。

如果您的源索引包含具有相同 ID 的文档,则只有最后索引的文档才会出现在目标索引中。

query
(可选,对象)Elasticsearch 查询特定领域语言 ( DSL)。此值对应于 Elasticsearch 搜索 POST 主体中的查询对象。可以使用 Elasticsearch 支持的所有选项,因为此对象会逐字传递给 Elasticsearch。默认情况下,此属性具有以下值:{"match_all": {}}
runtime_mappings
(可选,对象)运行时字段的定义,这些字段将成为目标索引映射的一部分。
_source

(可选,对象)指定 includes 和/或 excludes 模式以选择哪些字段将出现在目标中。排除的字段不能包含在分析中。

_source 的属性
includes
(数组)一个字符串数组,用于定义将包含在目标中的字段。
excludes
(数组)一个字符串数组,用于定义将从目标中排除的字段。

示例

编辑

预处理操作示例

编辑

以下示例展示了如何将分析范围限制为某些字段、指定目标索引中排除的字段,以及如何在分析前使用查询来筛选数据。

resp = client.ml.put_data_frame_analytics(
    id="model-flight-delays-pre",
    source={
        "index": [
            "kibana_sample_data_flights"
        ],
        "query": {
            "range": {
                "DistanceKilometers": {
                    "gt": 0
                }
            }
        },
        "_source": {
            "includes": [],
            "excludes": [
                "FlightDelay",
                "FlightDelayType"
            ]
        }
    },
    dest={
        "index": "df-flight-delays",
        "results_field": "ml-results"
    },
    analysis={
        "regression": {
            "dependent_variable": "FlightDelayMin",
            "training_percent": 90
        }
    },
    analyzed_fields={
        "includes": [],
        "excludes": [
            "FlightNum"
        ]
    },
    model_memory_limit="100mb",
)
print(resp)
const response = await client.ml.putDataFrameAnalytics({
  id: "model-flight-delays-pre",
  source: {
    index: ["kibana_sample_data_flights"],
    query: {
      range: {
        DistanceKilometers: {
          gt: 0,
        },
      },
    },
    _source: {
      includes: [],
      excludes: ["FlightDelay", "FlightDelayType"],
    },
  },
  dest: {
    index: "df-flight-delays",
    results_field: "ml-results",
  },
  analysis: {
    regression: {
      dependent_variable: "FlightDelayMin",
      training_percent: 90,
    },
  },
  analyzed_fields: {
    includes: [],
    excludes: ["FlightNum"],
  },
  model_memory_limit: "100mb",
});
console.log(response);
PUT _ml/data_frame/analytics/model-flight-delays-pre
{
  "source": {
    "index": [
      "kibana_sample_data_flights" 
    ],
    "query": { 
      "range": {
        "DistanceKilometers": {
          "gt": 0
        }
      }
    },
    "_source": { 
      "includes": [],
      "excludes": [
        "FlightDelay",
        "FlightDelayType"
      ]
    }
  },
  "dest": { 
    "index": "df-flight-delays",
    "results_field": "ml-results"
  },
  "analysis": {
  "regression": {
    "dependent_variable": "FlightDelayMin",
    "training_percent": 90
    }
  },
  "analyzed_fields": { 
    "includes": [],
    "excludes": [
      "FlightNum"
    ]
  },
  "model_memory_limit": "100mb"
}

要分析的源索引。

此查询筛选出不会出现在目标索引中的整个文档。

_source 对象定义数据集中将包含或排除在目标索引中的字段。

定义包含分析结果的目标索引以及 _source 对象中指定的源索引的字段。还定义了 results_field 的名称。

指定要包含在分析中或从分析中排除的字段。这不会影响字段是否会出现在目标索引中,只会影响它们是否在分析中使用。

在此示例中,我们可以看到源索引的所有字段都包含在目标索引中,但 FlightDelayFlightDelayType 除外,因为它们被 _source 对象的 excludes 参数定义为排除字段。FlightNum 字段包含在目标索引中,但它不包含在分析中,因为它由 analyzed_fields 对象的 excludes 参数显式指定为排除字段。

异常值检测示例

编辑

以下示例创建 loganalytics 数据帧分析作业,分析类型为 outlier_detection

resp = client.ml.put_data_frame_analytics(
    id="loganalytics",
    description="Outlier detection on log data",
    source={
        "index": "logdata"
    },
    dest={
        "index": "logdata_out"
    },
    analysis={
        "outlier_detection": {
            "compute_feature_influence": True,
            "outlier_fraction": 0.05,
            "standardization_enabled": True
        }
    },
)
print(resp)
const response = await client.ml.putDataFrameAnalytics({
  id: "loganalytics",
  description: "Outlier detection on log data",
  source: {
    index: "logdata",
  },
  dest: {
    index: "logdata_out",
  },
  analysis: {
    outlier_detection: {
      compute_feature_influence: true,
      outlier_fraction: 0.05,
      standardization_enabled: true,
    },
  },
});
console.log(response);
PUT _ml/data_frame/analytics/loganalytics
{
  "description": "Outlier detection on log data",
  "source": {
    "index": "logdata"
  },
  "dest": {
    "index": "logdata_out"
  },
  "analysis": {
    "outlier_detection": {
      "compute_feature_influence": true,
      "outlier_fraction": 0.05,
      "standardization_enabled": true
    }
  }
}

API 返回以下结果

{
  "id" : "loganalytics",
  "create_time" : 1656364565517,
  "version" : "8.4.0",
  "authorization" : {
    "roles" : [
      "superuser"
    ]
  },
  "description" : "Outlier detection on log data",
  "source" : {
    "index" : [
      "logdata"
    ],
    "query" : {
      "match_all" : { }
    }
  },
  "dest" : {
    "index" : "logdata_out",
    "results_field" : "ml"
  },
  "analysis" : {
    "outlier_detection" : {
      "compute_feature_influence" : true,
      "outlier_fraction" : 0.05,
      "standardization_enabled" : true
    }
  },
  "model_memory_limit" : "1gb",
  "allow_lazy_start" : false,
  "max_num_threads" : 1
}

回归示例

编辑

以下示例创建 house_price_regression_analysis 数据帧分析作业,分析类型为 regression

resp = client.ml.put_data_frame_analytics(
    id="house_price_regression_analysis",
    source={
        "index": "houses_sold_last_10_yrs"
    },
    dest={
        "index": "house_price_predictions"
    },
    analysis={
        "regression": {
            "dependent_variable": "price"
        }
    },
)
print(resp)
const response = await client.ml.putDataFrameAnalytics({
  id: "house_price_regression_analysis",
  source: {
    index: "houses_sold_last_10_yrs",
  },
  dest: {
    index: "house_price_predictions",
  },
  analysis: {
    regression: {
      dependent_variable: "price",
    },
  },
});
console.log(response);
PUT _ml/data_frame/analytics/house_price_regression_analysis
{
  "source": {
    "index": "houses_sold_last_10_yrs"
  },
  "dest": {
    "index": "house_price_predictions"
  },
  "analysis":
    {
      "regression": {
        "dependent_variable": "price"
      }
    }
}

API 返回以下结果

{
  "id" : "house_price_regression_analysis",
  "create_time" : 1656364845151,
  "version" : "8.4.0",
  "authorization" : {
    "roles" : [
      "superuser"
    ]
  },
  "source" : {
    "index" : [
      "houses_sold_last_10_yrs"
    ],
    "query" : {
      "match_all" : { }
    }
  },
  "dest" : {
    "index" : "house_price_predictions",
    "results_field" : "ml"
  },
  "analysis" : {
    "regression" : {
      "dependent_variable" : "price",
      "prediction_field_name" : "price_prediction",
      "training_percent" : 100.0,
      "randomize_seed" : -3578554885299300212,
      "loss_function" : "mse",
      "early_stopping_enabled" : true
    }
  },
  "model_memory_limit" : "1gb",
  "allow_lazy_start" : false,
  "max_num_threads" : 1
}

以下示例创建作业并指定训练百分比

resp = client.ml.put_data_frame_analytics(
    id="student_performance_mathematics_0.3",
    source={
        "index": "student_performance_mathematics"
    },
    dest={
        "index": "student_performance_mathematics_reg"
    },
    analysis={
        "regression": {
            "dependent_variable": "G3",
            "training_percent": 70,
            "randomize_seed": 19673948271
        }
    },
)
print(resp)
const response = await client.ml.putDataFrameAnalytics({
  id: "student_performance_mathematics_0.3",
  source: {
    index: "student_performance_mathematics",
  },
  dest: {
    index: "student_performance_mathematics_reg",
  },
  analysis: {
    regression: {
      dependent_variable: "G3",
      training_percent: 70,
      randomize_seed: 19673948271,
    },
  },
});
console.log(response);
PUT _ml/data_frame/analytics/student_performance_mathematics_0.3
{
 "source": {
   "index": "student_performance_mathematics"
 },
 "dest": {
   "index":"student_performance_mathematics_reg"
 },
 "analysis":
   {
     "regression": {
       "dependent_variable": "G3",
       "training_percent": 70,  
       "randomize_seed": 19673948271  
     }
   }
}

用于训练模型的数据集百分比。

用于随机选择哪些数据用于训练的种子。

以下示例使用自定义特征处理器,使用 one-hot、目标均值和频率编码技术将 DestWeather 的分类值转换为数值

resp = client.ml.put_data_frame_analytics(
    id="flight_prices",
    source={
        "index": [
            "kibana_sample_data_flights"
        ]
    },
    dest={
        "index": "kibana_sample_flight_prices"
    },
    analysis={
        "regression": {
            "dependent_variable": "AvgTicketPrice",
            "num_top_feature_importance_values": 2,
            "feature_processors": [
                {
                    "frequency_encoding": {
                        "field": "DestWeather",
                        "feature_name": "DestWeather_frequency",
                        "frequency_map": {
                            "Rain": 0.14604811155570188,
                            "Heavy Fog": 0.14604811155570188,
                            "Thunder & Lightning": 0.14604811155570188,
                            "Cloudy": 0.14604811155570188,
                            "Damaging Wind": 0.14604811155570188,
                            "Hail": 0.14604811155570188,
                            "Sunny": 0.14604811155570188,
                            "Clear": 0.14604811155570188
                        }
                    }
                },
                {
                    "target_mean_encoding": {
                        "field": "DestWeather",
                        "feature_name": "DestWeather_targetmean",
                        "target_map": {
                            "Rain": 626.5588814585794,
                            "Heavy Fog": 626.5588814585794,
                            "Thunder & Lightning": 626.5588814585794,
                            "Hail": 626.5588814585794,
                            "Damaging Wind": 626.5588814585794,
                            "Cloudy": 626.5588814585794,
                            "Clear": 626.5588814585794,
                            "Sunny": 626.5588814585794
                        },
                        "default_value": 624.0249512020454
                    }
                },
                {
                    "one_hot_encoding": {
                        "field": "DestWeather",
                        "hot_map": {
                            "Rain": "DestWeather_Rain",
                            "Heavy Fog": "DestWeather_Heavy Fog",
                            "Thunder & Lightning": "DestWeather_Thunder & Lightning",
                            "Cloudy": "DestWeather_Cloudy",
                            "Damaging Wind": "DestWeather_Damaging Wind",
                            "Hail": "DestWeather_Hail",
                            "Clear": "DestWeather_Clear",
                            "Sunny": "DestWeather_Sunny"
                        }
                    }
                }
            ]
        }
    },
    analyzed_fields={
        "includes": [
            "AvgTicketPrice",
            "Cancelled",
            "DestWeather",
            "FlightDelayMin",
            "DistanceMiles"
        ]
    },
    model_memory_limit="30mb",
)
print(resp)
const response = await client.ml.putDataFrameAnalytics({
  id: "flight_prices",
  source: {
    index: ["kibana_sample_data_flights"],
  },
  dest: {
    index: "kibana_sample_flight_prices",
  },
  analysis: {
    regression: {
      dependent_variable: "AvgTicketPrice",
      num_top_feature_importance_values: 2,
      feature_processors: [
        {
          frequency_encoding: {
            field: "DestWeather",
            feature_name: "DestWeather_frequency",
            frequency_map: {
              Rain: 0.14604811155570188,
              "Heavy Fog": 0.14604811155570188,
              "Thunder & Lightning": 0.14604811155570188,
              Cloudy: 0.14604811155570188,
              "Damaging Wind": 0.14604811155570188,
              Hail: 0.14604811155570188,
              Sunny: 0.14604811155570188,
              Clear: 0.14604811155570188,
            },
          },
        },
        {
          target_mean_encoding: {
            field: "DestWeather",
            feature_name: "DestWeather_targetmean",
            target_map: {
              Rain: 626.5588814585794,
              "Heavy Fog": 626.5588814585794,
              "Thunder & Lightning": 626.5588814585794,
              Hail: 626.5588814585794,
              "Damaging Wind": 626.5588814585794,
              Cloudy: 626.5588814585794,
              Clear: 626.5588814585794,
              Sunny: 626.5588814585794,
            },
            default_value: 624.0249512020454,
          },
        },
        {
          one_hot_encoding: {
            field: "DestWeather",
            hot_map: {
              Rain: "DestWeather_Rain",
              "Heavy Fog": "DestWeather_Heavy Fog",
              "Thunder & Lightning": "DestWeather_Thunder & Lightning",
              Cloudy: "DestWeather_Cloudy",
              "Damaging Wind": "DestWeather_Damaging Wind",
              Hail: "DestWeather_Hail",
              Clear: "DestWeather_Clear",
              Sunny: "DestWeather_Sunny",
            },
          },
        },
      ],
    },
  },
  analyzed_fields: {
    includes: [
      "AvgTicketPrice",
      "Cancelled",
      "DestWeather",
      "FlightDelayMin",
      "DistanceMiles",
    ],
  },
  model_memory_limit: "30mb",
});
console.log(response);
PUT _ml/data_frame/analytics/flight_prices
{
  "source": {
    "index": [
      "kibana_sample_data_flights"
    ]
  },
  "dest": {
    "index": "kibana_sample_flight_prices"
  },
  "analysis": {
    "regression": {
      "dependent_variable": "AvgTicketPrice",
      "num_top_feature_importance_values": 2,
      "feature_processors": [
        {
          "frequency_encoding": {
            "field": "DestWeather",
            "feature_name": "DestWeather_frequency",
            "frequency_map": {
              "Rain": 0.14604811155570188,
              "Heavy Fog": 0.14604811155570188,
              "Thunder & Lightning": 0.14604811155570188,
              "Cloudy": 0.14604811155570188,
              "Damaging Wind": 0.14604811155570188,
              "Hail": 0.14604811155570188,
              "Sunny": 0.14604811155570188,
              "Clear": 0.14604811155570188
            }
          }
        },
        {
          "target_mean_encoding": {
            "field": "DestWeather",
            "feature_name": "DestWeather_targetmean",
            "target_map": {
              "Rain": 626.5588814585794,
              "Heavy Fog": 626.5588814585794,
              "Thunder & Lightning": 626.5588814585794,
              "Hail": 626.5588814585794,
              "Damaging Wind": 626.5588814585794,
              "Cloudy": 626.5588814585794,
              "Clear": 626.5588814585794,
              "Sunny": 626.5588814585794
            },
            "default_value": 624.0249512020454
          }
        },
        {
          "one_hot_encoding": {
            "field": "DestWeather",
            "hot_map": {
              "Rain": "DestWeather_Rain",
              "Heavy Fog": "DestWeather_Heavy Fog",
              "Thunder & Lightning": "DestWeather_Thunder & Lightning",
              "Cloudy": "DestWeather_Cloudy",
              "Damaging Wind": "DestWeather_Damaging Wind",
              "Hail": "DestWeather_Hail",
              "Clear": "DestWeather_Clear",
              "Sunny": "DestWeather_Sunny"
            }
          }
        }
      ]
    }
  },
  "analyzed_fields": {
    "includes": [
      "AvgTicketPrice",
      "Cancelled",
      "DestWeather",
      "FlightDelayMin",
      "DistanceMiles"
    ]
  },
  "model_memory_limit": "30mb"
}

这些自定义特征处理器是可选的;对于所有分类特征,仍然会自动进行 特征编码

分类示例

编辑

以下示例创建 loan_classification 数据帧分析作业,分析类型为 classification

resp = client.ml.put_data_frame_analytics(
    id="loan_classification",
    source={
        "index": "loan-applicants"
    },
    dest={
        "index": "loan-applicants-classified"
    },
    analysis={
        "classification": {
            "dependent_variable": "label",
            "training_percent": 75,
            "num_top_classes": 2
        }
    },
)
print(resp)
const response = await client.ml.putDataFrameAnalytics({
  id: "loan_classification",
  source: {
    index: "loan-applicants",
  },
  dest: {
    index: "loan-applicants-classified",
  },
  analysis: {
    classification: {
      dependent_variable: "label",
      training_percent: 75,
      num_top_classes: 2,
    },
  },
});
console.log(response);
PUT _ml/data_frame/analytics/loan_classification
{
  "source" : {
    "index": "loan-applicants"
  },
  "dest" : {
    "index": "loan-applicants-classified"
  },
  "analysis" : {
    "classification": {
      "dependent_variable": "label",
      "training_percent": 75,
      "num_top_classes": 2
    }
  }
}