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()