Используя joblib
, вы можете сохранить любой Scikit-learn Pipeline
в комплекте со всеми его элементами, поэтому он включает также TfidfVectorizer
.
Здесь я переписал ваш пример, используя первые 200 примеровнабор данных Newsgroups20:
from sklearn.datasets import fetch_20newsgroups
data = fetch_20newsgroups()
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
from sklearn.multiclass import OneVsRestClassifier
vectorizer = TfidfVectorizer(strip_accents='unicode', analyzer='word', ngram_range=(1,3), norm='l2')
x_train = data.data[:100]
y_train = data.target[:100]
x_test = data.data[100:200]
y_test = data.target[100:200]
# Using pipeline for applying logistic regression and one vs rest classifier
LogReg_pipeline = Pipeline([
('vectorizer', vectorizer),
('clf', OneVsRestClassifier(LogisticRegression(solver='sag',
class_weight='balanced'),
n_jobs=-1))
])
# Training logistic regression model on train data
LogReg_pipeline.fit(x_train, y_train)
В приведенном выше коде вы просто начинаете определять данные о поездах и тестах и создаете экземпляр своего TfidfVectorizer
.Затем вы определяете свой конвейер, содержащий как векторизатор, так и классификатор OVR, и подгоняете его к обучающим данным.Он научится предсказывать все классы одновременно.
Теперь вы просто сохраняете весь подобранный конвейер, как если бы он был одним предиктором, используя joblib
:
from joblib import dump, load
dump(LogReg_pipeline, 'LogReg_pipeline.joblib')
Вся ваша модель не являетсясохраняется на диск под именем «LogReg_pipeline.joblib».Вы можете отозвать его и использовать его непосредственно для необработанных данных с помощью следующего фрагмента кода:
clf = load('LogReg_pipeline.joblib')
clf.predict(x_test)
Вы получите прогнозы для необработанного текста, поскольку конвейер автоматически его векторизирует.