Create trained model API

Creates an trained model.

Models created in version 7.8.0 are not backwards compatible with older node versions. If in a mixed cluster environment, all nodes must be at least 7.8.0 to use a model stored by a 7.8.0 node.

This functionality is experimental and may be changed or removed completely in a future release. Elastic will take a best effort approach to fix any issues, but experimental features are not subject to the support SLA of official GA features.

Request

PUT _ml/inference/<model_id>

Prerequisites

If the Elasticsearch security features are enabled, you must have the following built-in roles or equivalent privileges:

  • machine_learning_admin

For more information, see Built-in roles and Machine learning security privileges.

Description

The create trained model API enables you to supply a trained model that is not created by data frame analytics.

Path parameters

<model_id>

(Required, string) The unique identifier of the trained model.

Request body

compressed_definition

(Required, string) The compressed (GZipped and Base64 encoded) inference definition of the model. If compressed_definition is specified, then definition cannot be specified.

definition

(Required, object) The inference definition for the model. If definition is specified, then compressed_definition cannot be specified.

Properties of definition

  • preprocessors

    (Optional, object) Collection of preprocessors. See Preprocessor examples.

    Properties of preprocessors

    • frequency_encoding

      (Required, object) Defines a frequency encoding for a field.

      Properties of frequency_encoding

      feature_name

      (Required, string) The name of the resulting feature.

      field

      (Required, string) The field name to encode.

      frequency_map

      (Required, object map of string:double) Object that maps the field value to the frequency encoded value.

  1. - `one_hot_encoding`
  2. (Required, object) Defines a one hot encoding map for a field.
  3. Properties of `one_hot_encoding`
  4. `field`
  5. (Required, string) The field name to encode.
  6. `hot_map`
  7. (Required, object map of strings) String map of "field\_value: one\_hot\_column\_name".
  8. - `target_mean_encoding`
  9. (Required, object) Defines a target mean encoding for a field.
  10. Properties of `target_mean_encoding`
  11. `default_value`
  12. (Required, double) The feature value if the field value is not in the `target_map`.
  13. `feature_name`
  14. (Required, string) The name of the resulting feature.
  15. `field`
  16. (Required, string) The field name to encode.
  17. `target_map`
  18. (Required, object map of string:double) Object that maps the field value to the target mean value.
  • trained_model

    (Required, object) The definition of the trained model.

    Properties of trained_model

    • tree

      (Required, object) The definition for a binary decision tree.

      Properties of tree

      classification_labels

      (Optional, string) An array of classification labels (used for classification).

      feature_names

      (Required, string) Features expected by the tree, in their expected order.

      target_type

      (Required, string) String indicating the model target type; regression or classification.

      tree_structure

      (Required, object) An array of tree_node objects. The nodes must be in ordinal order by their tree_node.node_index value.

  1. - `tree_node`
  2. (Required, object) The definition of a node in a tree.
  3. There are two major types of nodes: leaf nodes and not-leaf nodes.
  4. - Leaf nodes only need `node_index` and `leaf_value` defined.
  5. - All other nodes need `split_feature`, `left_child`, `right_child`, `threshold`, `decision_type`, and `default_left` defined.
  6. Properties of `tree_node`
  7. `decision_type`
  8. (Optional, string) Indicates the positive value (in other words, when to choose the left node) decision type. Supported `lt`, `lte`, `gt`, `gte`. Defaults to `lte`.
  9. `default_left`
  10. (Optional, boolean) Indicates whether to default to the left when the feature is missing. Defaults to `true`.
  11. `leaf_value`
  12. (Optional, double) The leaf value of the of the node, if the value is a leaf (in other words, no children).
  13. `left_child`
  14. (Optional, integer) The index of the left child.
  15. `node_index`
  16. (Integer) The index of the current node.
  17. `right_child`
  18. (Optional, integer) The index of the right child.
  19. `split_feature`
  20. (Optional, integer) The index of the feature value in the feature array.
  21. `split_gain`
  22. (Optional, double) The information gain from the split.
  23. `threshold`
  24. (Optional, double) The decision threshold with which to compare the feature value.
  25. - `ensemble`
  26. (Optional, object) The definition for an ensemble model. See [Model examples]($97b3fcc9f6b20e41.md#ml-put-inference-model-example "Model examples").
  27. Properties of `ensemble`
  28. `aggregate_output`
  29. (Required, object) An aggregated output object that defines how to aggregate the outputs of the `trained_models`. Supported objects are `weighted_mode`, `weighted_sum`, and `logistic_regression`. See [Aggregated output example]($97b3fcc9f6b20e41.md#ml-put-inference-aggregated-output-example "Aggregated output example").
  30. Properties of `aggregate_output`
  31. `logistic_regression`
  32. (Optional, object) This `aggregated_output` type works with binary classification (classification for values \[0, 1\]). It multiplies the outputs (in the case of the `ensemble` model, the inference model values) by the supplied `weights`. The resulting vector is summed and passed to a [`sigmoid` function](https://en.wikipedia.org/wiki/Sigmoid_function). The result of the `sigmoid` function is considered the probability of class 1 (`P_1`), consequently, the probability of class 0 is `1 - P_1`. The class with the highest probability (either 0 or 1) is then returned. For more information about logistic regression, see [this wiki article](https://en.wikipedia.org/wiki/Logistic_regression).
  33. Properties of `logistic_regression`
  34. `weights`
  35. (Required, double) The weights to multiply by the input values (the inference values of the trained models).
  36. `weighted_sum`
  37. (Optional, object) This `aggregated_output` type works with regression. The weighted sum of the input values.
  38. Properties of `weighted_sum`
  39. `weights`
  40. (Required, double) The weights to multiply by the input values (the inference values of the trained models).
  41. `weighted_mode`
  42. (Optional, object) This `aggregated_output` type works with regression or classification. It takes a weighted vote of the input values. The most common input value (taking the weights into account) is returned.
  43. Properties of `weighted_mode`
  44. `weights`
  45. (Required, double) The weights to multiply by the input values (the inference values of the trained models).
  46. `exponent`
  47. (Optional, object) This `aggregated_output` type works with regression. It takes a weighted sum of the input values and passes the result to an exponent function (`e^x` where `x` is the sum of the weighted values).
  48. Properties of `exponent`
  49. `weights`
  50. (Required, double) The weights to multiply by the input values (the inference values of the trained models).
  51. `classification_labels`
  52. (Optional, string) An array of classification labels.
  53. `feature_names`
  54. (Optional, string) Features expected by the ensemble, in their expected order.
  55. `target_type`
  56. (Required, string) String indicating the model target type; `regression` or `classification.`
  57. `trained_models`
  58. (Required, object) An array of `trained_model` objects. Supported trained models are `tree` and `ensemble`.

description

(Optional, string) A human-readable description of the inference trained model.

inference_config

(Required, object) The default configuration for inference. This can be either a regression or classification configuration. It must match the underlying definition.trained_model‘s target_type.

Properties of inference_config

  • regression

    (Optional, object) Regression configuration for inference.

    Properties of regression inference

    • num_top_feature_importance_values

      (Optional, integer) Specifies the maximum number of feature importance values per document. By default, it is zero and no feature importance calculation occurs.

      results_field

      (Optional, string) The field that is added to incoming documents to contain the inference prediction. Defaults to predicted_value.

  1. `classification`
  2. (Optional, object) Classification configuration for inference.
  3. Properties of classification inference
  4. - `num_top_classes`
  5. (Optional, integer) Specifies the number of top class predictions to return. Defaults to 0.
  6. `num_top_feature_importance_values`
  7. (Optional, integer) Specifies the maximum number of [feature importance](https://www.elastic.co/guide/en/machine-learning/current/ml-feature-importance.html) values per document. By default, it is zero and no feature importance calculation occurs.
  8. `prediction_field_type`
  9. (Optional, string) Specifies the type of the predicted field to write. Acceptable values are: `string`, `number`, `boolean`. When `boolean` is provided `1.0` is transformed to `true` and `0.0` to `false`.
  10. `results_field`
  11. (Optional, string) The field that is added to incoming documents to contain the inference prediction. Defaults to `predicted_value`.
  12. `top_classes_results_field`
  13. (Optional, string) Specifies the field to which the top classes are written. Defaults to `top_classes`.

input

(Required, object) The input field names for the model definition.

Properties of input

  • field_names

    (Required, string) An array of input field names for the model.

metadata

(Optional, object) An object map that contains metadata about the model.

tags

(Optional, string) An array of tags to organize the model.

Examples

Preprocessor examples

The example below shows a frequency_encoding preprocessor object:

  1. {
  2. "frequency_encoding":{
  3. "field":"FlightDelayType",
  4. "feature_name":"FlightDelayType_frequency",
  5. "frequency_map":{
  6. "Carrier Delay":0.6007414737092798,
  7. "NAS Delay":0.6007414737092798,
  8. "Weather Delay":0.024573576178086153,
  9. "Security Delay":0.02476631010889467,
  10. "No Delay":0.6007414737092798,
  11. "Late Aircraft Delay":0.6007414737092798
  12. }
  13. }
  14. }

The next example shows a one_hot_encoding preprocessor object:

  1. {
  2. "one_hot_encoding":{
  3. "field":"FlightDelayType",
  4. "hot_map":{
  5. "Carrier Delay":"FlightDelayType_Carrier Delay",
  6. "NAS Delay":"FlightDelayType_NAS Delay",
  7. "No Delay":"FlightDelayType_No Delay",
  8. "Late Aircraft Delay":"FlightDelayType_Late Aircraft Delay"
  9. }
  10. }
  11. }

This example shows a target_mean_encoding preprocessor object:

  1. {
  2. "target_mean_encoding":{
  3. "field":"FlightDelayType",
  4. "feature_name":"FlightDelayType_targetmean",
  5. "target_map":{
  6. "Carrier Delay":39.97465788139886,
  7. "NAS Delay":39.97465788139886,
  8. "Security Delay":203.171206225681,
  9. "Weather Delay":187.64705882352948,
  10. "No Delay":39.97465788139886,
  11. "Late Aircraft Delay":39.97465788139886
  12. },
  13. "default_value":158.17995752420433
  14. }
  15. }

Model examples

The first example shows a trained_model object:

  1. {
  2. "tree":{
  3. "feature_names":[
  4. "DistanceKilometers",
  5. "FlightTimeMin",
  6. "FlightDelayType_NAS Delay",
  7. "Origin_targetmean",
  8. "DestRegion_targetmean",
  9. "DestCityName_targetmean",
  10. "OriginAirportID_targetmean",
  11. "OriginCityName_frequency",
  12. "DistanceMiles",
  13. "FlightDelayType_Late Aircraft Delay"
  14. ],
  15. "tree_structure":[
  16. {
  17. "decision_type":"lt",
  18. "threshold":9069.33437193022,
  19. "split_feature":0,
  20. "split_gain":4112.094574306927,
  21. "node_index":0,
  22. "default_left":true,
  23. "left_child":1,
  24. "right_child":2
  25. },
  26. ...
  27. {
  28. "node_index":9,
  29. "leaf_value":-27.68987349695448
  30. },
  31. ...
  32. ],
  33. "target_type":"regression"
  34. }
  35. }

The following example shows an ensemble model object:

  1. "ensemble":{
  2. "feature_names":[
  3. ...
  4. ],
  5. "trained_models":[
  6. {
  7. "tree":{
  8. "feature_names":[],
  9. "tree_structure":[
  10. {
  11. "decision_type":"lte",
  12. "node_index":0,
  13. "leaf_value":47.64069875778043,
  14. "default_left":false
  15. }
  16. ],
  17. "target_type":"regression"
  18. }
  19. },
  20. ...
  21. ],
  22. "aggregate_output":{
  23. "weighted_sum":{
  24. "weights":[
  25. ...
  26. ]
  27. }
  28. },
  29. "target_type":"regression"
  30. }

Aggregated output example

Example of a logistic_regression object:

  1. "aggregate_output" : {
  2. "logistic_regression" : {
  3. "weights" : [2.0, 1.0, .5, -1.0, 5.0, 1.0, 1.0]
  4. }
  5. }

Example of a weighted_sum object:

  1. "aggregate_output" : {
  2. "weighted_sum" : {
  3. "weights" : [1.0, -1.0, .5, 1.0, 5.0]
  4. }
  5. }

Example of a weighted_mode object:

  1. "aggregate_output" : {
  2. "weighted_mode" : {
  3. "weights" : [1.0, 1.0, 1.0, 1.0, 1.0]
  4. }
  5. }

Example of an exponent object:

  1. "aggregate_output" : {
  2. "exponent" : {
  3. "weights" : [1.0, 1.0, 1.0, 1.0, 1.0]
  4. }
  5. }

Inference JSON schema

For the full JSON schema of model inference, click here.