Я пытаюсь создать классификатор с несколькими метками, используя оболочку классификатора one vs rest.
Я использовал конвейер для TFIDF и классификатор.
При настройке конвейера я должен циклически просматривать свои данные по категориям, а затем каждый раз подбирать конвейер, чтобы делать прогнозы для каждой категории.
Теперь я хочу экспортировать это так, как если бы вы обычно экспортировали подогнанную модель, используя pickle или joblib.
Пример:
pickle.dump(clf,'clf.pickle')
Как я могу сделать это с конвейером?Даже если я выбираю конвейер, нужно ли мне соответствовать конвейеру каждый раз, когда я хочу прогнозировать новое ключевое слово?
Пример:
pickle.dump(pipeline,'pipeline.pickle')
pipeline = pickle.load('pipeline.pickle')
for category in categories:
pipeline.fit(X_train, y_train[category])
pipeline.predict(['kiwi'])
print (predict)
Если я пропущу pipeline.fit(X_train, y_train[category])
после загрузки конвейера я получаю только один массив значений в предикторе.Если я подгоняю конвейер, я получаю массив из трех значений.
Кроме того, как я могу включить поиск по сетке в свой конвейер для экспорта?
raw_data
keyword class1 class2 class3
"orange apple" 1 0 1
"lime lemon" 1 0 0
"banana" 0 1 0
categories = ['class1','class2','class3']
конвейер
SVC_pipeline = Pipeline([
('tfidf', TfidfVectorizer(stop_words=stop_words)),
('clf', OneVsRestClassifier(LinearSVC(), n_jobs=1)),
])
Gridsearch (не знаю, как включить это в конвейер )
parameters = {'tfidf__ngram_range': [(1, 1), (1, 2)],
'tfidf__use_idf': (True, False),
'tfidf__max_df': [0.25, 0.5, 0.75, 1.0],
'tfidf__max_features': [10, 50, 100, 250, 500, 1000, None],
'tfidf__stop_words': ('english', None),
'tfidf__smooth_idf': (True, False),
'tfidf__norm': ('l1', 'l2', None),
}
grid = GridSearchCV(SVC_pipeline, parameters, cv=2, verbose=1)
grid.fit(X_train, y_train)
Фитинг трубопроводный
for category in categories:
print('... Processing {}'.format(category))
SVC_pipeline.fit(X_train, y_train[category])
# compute the testing accuracy
prediction = SVC_pipeline.predict(X_test)
print('Test accuracy is {}'.format(accuracy_score(y_test[category], prediction)))