Я относительно новичок в 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'))
После повторной загрузки маринада я получил вышеупомянутую ошибку при попытке сделать прогнозы для новые данные.