Как правильно сохранить и загрузить модель Pipeline, содержащую шаг CountVectorizer в python - PullRequest
0 голосов
/ 02 апреля 2020

Я относительно новичок в python. Я из R.

Я пытаюсь сохранить предварительно обученную модель, в которой я использую Pipeline с CountVectorizer и другие шаги.

Я проверил некоторые вопросы, ссылаясь на NotFittedError: Vocabulary not fitted or provided при загрузке маринада предварительно обученной модели с помощью Countvectorizer. Обычно люди рекомендуют сохранять объект vectorize (в моем случае vect) как отдельный объект. Однако я не нашел ничего связанного с тем, как это сделать, когда у нас есть модель Pipeline.

Итак, я был бы признателен за любую помощь, которую вы можете оказать по этому вопросу; показать, как правильно сохранить весь конвейер как один объект, чтобы его можно было загрузить позже; или как сохранить и загрузить каждую часть конвейера отдельно.

Вот пример:

from sklearn import svm
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.model_selection import GridSearchCV
...
from imblearn.pipeline import Pipeline as Pipeline_imblearn
from imblearn.under_sampling import TomekLinks
...
import pickle

# load some data here

text_clf = Pipeline_imblearn([
    ('vect', CountVectorizer(binary=True, ngram_range = (1,2), stop_words=stoppers3)),
    ('tfidf', TfidfTransformer()),
    ('undersampler', TomekLinks()),
    ('clf', svm.SVC(kernel='rbf')),
    ])

# svm - clf params
Cs = [10**(-1), 10**(0), 10**(1), 10**(2)]
gammas = [10**(-2), 10**(-1), 10**(0), 10**(1)]

param_grid = {'clf__C': Cs, 'clf__gamma': gammas}

gs_text_clf = GridSearchCV(text_clf, param_grid, cv=5)

gs_text_clf = gs_text_clf.fit(X_train, y_train)

# save object to a pickle
filename = 'SVM_model.mdl'
pickle.dump(gs_text_clf, open(filename, 'wb'))

После повторной загрузки маринада я получил вышеупомянутую ошибку при попытке сделать прогнозы для новые данные.

...