使用 joblib 在 x86 上转储 scikit-learn 模型,然后在 z/OS 上读取决策树中的传递,但在 GradientBoostingRegressor 上失败

问题描述 投票:0回答:1

我对 numpy_pickle.py 中的 NumpyArrayWrapper 进行了一些小调整,以允许决策树模型成功加载到在 z/OS 上运行的 scikit-learn 上。更改归结为检查字节顺序是否正确,如果不正确则调用 array.byteswap()。然而,当尝试加载 GradientBoostingRegressor 模型时,它甚至在达到字节交换修复之前就失败了。

错误来自这一行https://github.com/scikit-learn/scikit-learn/blob/0.18.1/sklearn/tree/_tree.pyx#L644,这是因为以下条件

 node_ndarray.dtype != NODE_DTYPE
。发生这种情况的原因是梯度提升回归器命中了以下代码行,而决策树没有命中以下代码行https://github.com/scikit-learn/scikit-learn/blob/0.18.1/sklearn/externals/joblib/ numpy_pickle.py#L105

我想知道是否有人知道我是否应该做一些不同的事情,因为 DT 模型的 Dtypes 在 z/OS 上加载时似乎很好,但它们不适用于 GBR 模型。这似乎来自 model.fit 方法,因为当删除该调用时,我可以在 z/OS 上成功加载 pkl 文件。

训练梯度提升模型的代码

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.pipeline import Pipeline
from sklearn import datasets
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier

from sklearn.model_selection import train_test_split

iris = datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)

gbr = GradientBoostingRegressor(max_depth=3)
model = Pipeline([('Gbr', gbr)])

model.fit(X_train, y_train)


from sklearn.externals import joblib
joblib.dump(model, 'GBTmodelx86.pkl')

训练决策树模型的代码

from sklearn import datasets
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier

dataset = datasets.load_iris()

model = DecisionTreeClassifier()
model.fit(dataset.data, dataset.target)

from sklearn.externals import joblib
joblib.dump(model, 'DTmodelX86.pkl')

加载每个模型的代码

from sklearn.externals import joblib
model = joblib.load('DTmodelX86.pkl') 
from sklearn.externals import joblib
model = joblib.load('GBTmodelx86.pkl') 
python python-3.x scikit-learn x86 zos
1个回答
0
投票

我知道这是四年前提出的,但我认为仍然值得解释一下。 当您创建对象并将其导出到模型时,格式不兼容。如果您要将模型部署到 z/OS,您将需要一些实用程序来导出模型。

您可以在这里看到: https://www.ibm.com/docs/en/wml-for-zos/2.1.0.3?topic=zos-importing-spark-scikit-learn-xgboost-models

或者更现代的版本: https://www.ibm.com/docs/en/wml-for-zos/2.4.0?topic=wmlz-importing-models-from-file

如果您将机器学习用于 z/OS 引擎,则这些是。

如果您只是在大型机上独立运行 Python,则需要安装 IBM Python AI Toolkit for z/OS: https://ibm-z-oss-oda.github.io/python_ai_toolkit_zos/

然后,您需要以兼容的格式(例如 PMML,而不是 pkl)导出模型。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.