Использование joblib для выгрузки модели scikit-learn на x86 и последующего чтения в z / OS передается в дереве решений, но происходит сбой в GradientBoostingRegressor - PullRequest
1 голос
/ 05 апреля 2019

Я сделал несколько небольших изменений в 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') 
...