Python scikit-learn: экспорт обученного классификатора
Я использую DBN (сеть глубокого убеждения) из nolearn на основе scikit-learn.
Я уже построил сеть, которая может очень хорошо классифицировать мои данные, теперь я заинтересован в экспорте модели для развертывания, но я не знаю как (я тренирую DBN каждый раз, когда хочу что-то предсказать). В matlab
я просто экспортировал бы весовую матрицу и импортировал ее в другой компьютер.
Кто-нибудь знает, как экспортировать модель/весовую матрицу для импорта без необходимости повторного обучения всей модели?
Ответы
Ответ 1
Сначала установите joblib.
Вы можете использовать:
>>> import joblib
>>> joblib.dump(clf, 'my_model.pkl', compress=9)
А потом, на сервере прогнозирования:
>>> import joblib
>>> model_clone = joblib.load('my_model.pkl')
Это в основном Python pickle с оптимизированной обработкой для больших массивов. Он имеет те же ограничения, что и обычный рассол w.r.t. изменение кода: если структура класса объекта pickle изменится, вы больше не сможете откреплять объект новыми версиями nolearn или scikit-learn.
Если вам нужен долгосрочный надежный способ хранения параметров вашей модели, вам может потребоваться написать собственный уровень ввода-вывода (например, с использованием инструментов сериализации двоичного формата, таких как буферы протокола или avro, или неэффективного, но портативного представления текста /json/xml, такого как PMML).
Ответ 2
Недостатком травления/рассыпания является то, что он работает только с соответствующими версиями python (основными и, возможно, второстепенными версиями) и sklearn, версиями библиотеки joblib.
Существуют альтернативные описательные выходные форматы для моделей машинного обучения, например, разработанные Группа интеллектуального анализа данных, такие как язык разметки интеллектуальных моделей ( PMML) и переносимый формат для аналитики (PFA). Из двух, PMML намного лучше поддерживается.
Таким образом, у вас есть возможность сохранить модель из scikit-learn в PMML (например, используя sklearn2pmml), а затем разверните и запустите его в java, spark или hive, используя jpmml (конечно, у вас больше выбора).
Ответ 3
Раздел 3.4. Настойчивость модели в документации scikit-learn охватывает почти все.
В дополнение к sklearn.externals.joblib
ogrisel, указанному, он показывает, как использовать регулярный пакет соленья:
>>> from sklearn import svm
>>> from sklearn import datasets
>>> clf = svm.SVC()
>>> iris = datasets.load_iris()
>>> X, y = iris.data, iris.target
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)
>>> import pickle
>>> s = pickle.dumps(clf)
>>> clf2 = pickle.loads(s)
>>> clf2.predict(X[0])
array([0])
>>> y[0]
0
и дает несколько предупреждений, таких как модели, сохраненные в одной версии scikit-learn, могут не загружаться в другой версии.