Я сделал несколько небольших изменений в NumpyArrayWrapper в numpy_pickle.py, чтобы позволить модели дерева решений успешно загружаться в scikit-learn, работающий в z / OS.Изменение сводится к проверке правильности порядка байтов и, если нет, к вызову array.byteswap ().Однако при попытке загрузить модель GradientBoostingRegressor происходит сбой до того, как даже достигается исправление byteswap.
Ошибка исходит из этой строки 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
Мне было интересно, если кто-нибудь знает, есть ли что-то другое, что я должен делать, потому что Dtypes дляМодель DT, кажется, хорошо при загрузке в z / OS, но они не для модели GBR.Похоже, это происходит из метода model.fit, потому что при удалении этого вызова я могу успешно загрузить файл pkl в z / OS.
Код для обучения модели повышения градиента
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')