python - 使用 joblib 在 x86 上转储 scikit-learn 模型,然后在 z/OS 上读取决策树传递,但在 GradientBoostingRegressor 上失败
问题描述
我对 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')
解决方案
推荐阅读
- visual-studio-code - Prevent default "close editor" behavior of going to previously opened editor
- php - ajax回调后增量计数器不起作用
- python - 在 pandas read_excel 中指定 index_col 时忽略 dtype 参数
- javascript - NodeJS 和 Mysql 连接配置被忽略
- python-3.x - 循环将熊猫数据帧的特定行中的字符串写入 PDF
- html - 如何在左右突出一个div
- python - 如果两个列表包含的表面 pygame 对象相等,我该如何检查?
- amazon-web-services - 如何从 terraform 创建 ansible 库存?
- c# - 我怎样才能让火箭围绕它的底部旋转,并统一到中间?
- python - 使用生成器为数据帧创建掩码函数