eland.ml.MLModel.import_model#

classmethod MLModel.import_model(es_client: Union[str, List[str], Tuple[str, ...], Elasticsearch], model_id: str, model: Union[DecisionTreeClassifier, DecisionTreeRegressor, RandomForestRegressor, RandomForestClassifier, XGBClassifier, XGBRanker, XGBRegressor, LGBMRegressor, LGBMClassifier], feature_names: List[str], classification_labels: Optional[List[str]] = None, classification_weights: Optional[List[float]] = None, es_if_exists: Optional[str] = None, es_compress_model_definition: bool = True) MLModel#

将训练好的第三方模型转换为并序列化到 Elasticsearch 中。然后可以在 Elastic Stack 中使用此模型进行推理。

参数#

es_client: Elasticsearch 客户端参数
  • elasticsearch-py 参数或

  • elasticsearch-py 实例

model_id: str

训练好的推理模型在 Elasticsearch 中的唯一标识符。

model: 支持的 python 模型的实例。我们支持以下模型类型
  • sklearn.tree.DecisionTreeClassifier
    • 注意:在计算给定分类标签的概率时,Elasticsearch 使用

      softMax。SKLearn 相反会对结果进行归一化。我们尝试在模型序列化期间对此进行考虑,但预测中的概率可能略有不同。

  • sklearn.tree.DecisionTreeRegressor

  • sklearn.ensemble.RandomForestRegressor

  • sklearn.ensemble.RandomForestClassifier

  • lightgbm.LGBMRegressor
    • 预计分类字段已经过处理

    • 仅支持以下目标
      • “regression”

      • “regression_l1”

      • “huber”

      • “fair”

      • “quantile”

      • “mape”

  • lightgbm.LGBMClassifier
    • 预计分类字段已经过处理

    • 仅支持以下目标
      • “binary”

      • “multiclass”

      • “multiclassova”

  • xgboost.XGBClassifier
    • 仅支持以下目标
      • “binary:logistic”

      • “multi:softmax”

      • “multi:softprob”

  • xgboost.XGBRanker
    • 仅支持以下目标
      • “rank:map”

      • “rank:ndcg”

      • “rank:pairwise”

  • xgboost.XGBRegressor
    • 仅支持以下目标
      • “reg:squarederror”

      • “reg:linear”

      • “reg:squaredlogerror”

      • “reg:logistic”

      • “reg:pseudohubererror”

feature_names: List[str]

特征的名称(必填)

classification_labels: List[str]

分类目标的标签

classification_weights: List[str]

分类目标的权重

es_if_exists: {‘fail’, ‘replace’} 默认 ‘fail’

如果模型已存在,如何处理

  • fail: 抛出 ValueError

  • replace: 覆盖现有模型

es_compress_model_definition: bool

如果为 True,将使用 ‘compressed_definition’,它使用 gzip 压缩的 JSON 而不是原始 JSON,以减少 HTTP 请求中通过网络发送的数据量。默认值为 ‘True’。

示例#

>>> from sklearn import datasets
>>> from sklearn.tree import DecisionTreeClassifier
>>> from eland.ml import MLModel
>>> # Train model
>>> training_data = datasets.make_classification(n_features=5, random_state=0)
>>> test_data = [[-50.1, 0.2, 0.3, -0.5, 1.0], [1.6, 2.1, -10, 50, -1.0]]
>>> classifier = DecisionTreeClassifier()
>>> classifier = classifier.fit(training_data[0], training_data[1])
>>> # Get some test results
>>> classifier.predict(test_data)
array([0, 1])
>>> # Serialise the model to Elasticsearch
>>> feature_names = ["f0", "f1", "f2", "f3", "f4"]
>>> model_id = "test_decision_tree_classifier"
>>> es_model = MLModel.import_model(
...   'http://localhost:9200',
...   model_id=model_id,
...   model=classifier,
...   feature_names=feature_names,
...   es_if_exists='replace'
... )
>>> # Get some test results from Elasticsearch model
>>> es_model.predict(test_data)
array([0, 1])
>>> # Delete model from Elasticsearch
>>> es_model.delete_model()