Использование joblib для сброса модели scikit-learn на x86, затем чтение на z / OS проходит в дереве решений, но завершается неудачей на GradientBoostingRegressor

#python #python-3.x #scikit-learn #x86 #zos

#питон #python-3.x #scikit-learn #x86 #зос

Вопрос:

Я внес некоторые небольшие изменения в 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. Похоже, что это исходит из модели.метод 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') 
  

Комментарии:

1. Вы пробовали спросить поставщика ?