Как сохранить обученный наивный байесовский классификатор на диск и использовать его для прогнозирования данных?
У меня есть следующий пример программы с сайта scikit-learn:
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print "Number of mislabeled points : %d" % (iris.target != y_pred).sum()
Вы также можете использовать joblib.dump и joblib.load, которые гораздо более эффективны при обработке числовых массивов, чем стандартный выборщик питона.
Joblib включен в scikit-learn:
Редактировать: в Python 3.8+ теперь возможно использовать pickle для эффективного выбора объекта с большими числовыми массивами в качестве атрибутов, если вы используете протокол pickle 5 (который не используется по умолчанию).
источник
fit
метода, если это то, что вы ищете. Это, как говорится,joblib.load
не должно вызывать исключение после успешного завершения,joblib.dump
если вы вызываете его из Python с той же версией библиотеки scikit-learn.--pylab
флаг командной строки или%pylab
магию, поскольку неявная перегрузка пространства имен, как известно, нарушает процесс выбора.%matplotlib inline
Вместо этого используйте явный импорт и магию.То, что вы ищете, называется сохранением модели в словах sklearn и задокументировано во введении и в разделах сохранения модели .
Итак, вы инициализировали свой классификатор и долгое время обучали его
После этого у вас есть два варианта:
1) Используя Pickle
2) Использование Joblib
Еще раз полезно прочитать вышеупомянутые ссылки
источник
Во многих случаях, особенно с классификацией текста, недостаточно просто сохранить классификатор, но вам также необходимо сохранить векторизатор, чтобы вы могли векторизовать свой ввод в будущем.
будущее использование:
Перед сбросом векторизатора можно удалить свойство векторизатора stop_words_:
сделать сброс более эффективным. Также, если параметры вашего классификатора редки (как в большинстве примеров текстовой классификации), вы можете преобразовать параметры из плотного в разреженный, что будет иметь огромное значение с точки зрения потребления памяти, загрузки и выгрузки. Разрежьте модель по:
Это будет автоматически работать для SGDClassifier, но если вы знаете, что ваша модель редкая (много нулей в clf.coef_), то вы можете вручную преобразовать clf.coef_ в скудную матрицу csr scipy :
и тогда вы можете хранить его более эффективно.
источник
sklearn
Оценщики реализуют методы, чтобы вам было легко сохранять соответствующие обученные свойства оценщика. Некоторые оценщики__getstate__
сами реализуют методы, а другие, например,GMM
просто используют базовую реализацию, которая просто сохраняет внутренний словарь объектов:Рекомендуемый метод сохранения вашей модели на диск - использовать
pickle
модуль:Тем не менее, вам следует сохранить дополнительные данные, чтобы вы могли в будущем переучить свою модель или столкнуться с тяжелыми последствиями (такими как блокировка в старой версии sklearn) .
Из документации :
Это особенно верно для оценщиков Ensemble, которые полагаются на
tree.pyx
модуль, написанный на Cython (например,IsolationForest
), поскольку он создает связь с реализацией, которая не гарантируется стабильной между версиями sklearn. Он видел назад несовместимые изменения в прошлом.Если ваши модели становятся очень большими и загрузка становится неприятной, вы также можете использовать более эффективные
joblib
. Из документации:источник
but can only pickle to the disk and not to a string
Но вы можете засолить это в StringIO из JobLib. Это то, что я делаю все время.The training data, e.g. a reference to a immutable snapshot
здесь? ТИА!sklearn.externals.joblib
устарели , так0.21
и будет удален вv0.23
:Поэтому вам необходимо установить
joblib
:и, наконец, запишите модель на диск:
Теперь, чтобы прочитать дамп-файл, все, что вам нужно, это запустить:
источник