Подтвердить что ты не робот

Python scikit-learn: экспорт обученного классификатора

Я использую DBN (сеть глубокого убеждения) из nolearn на основе scikit-learn.

Я уже построил сеть, которая может очень хорошо классифицировать мои данные, теперь я заинтересован в экспорте модели для развертывания, но я не знаю как (я тренирую DBN каждый раз, когда хочу что-то предсказать). В matlab я просто экспортировал бы весовую матрицу и импортировал ее в другой компьютер.

Кто-нибудь знает, как экспортировать модель/весовую матрицу для импорта без необходимости повторного обучения всей модели?

4b9b3361

Ответ 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, могут не загружаться в другой версии.