У меня есть модели большого размера SVC (~ 50Mb cPickles) для классификации текста, и я использую различные способы использования их в производственной среде. Классификация партий документов работает очень хорошо (около 1 тыс. Документов в минуту с использованием как predict
, так и predict_proba
). Однако прогноз на одном документе, другая история, как описано в комментарии к this question:Улучшение производительности предсказания SVC на отдельных образцах
Вы делаете прогнозы в пакетном режиме? Метод SVC.predict, к сожалению, несет много накладных расходов, потому что он должен восстановить структуру данных LibSVM, аналогичную той, которую подготовил алгоритм обучения, мелкой копии в векторах поддержки и преобразовать тестовые образцы в формат LibSVM, который может отличаться от форматов NumPy/SciPy. Поэтому прогнозирование на одном образце должно быть медленным. - larsmans
Я уже обслуживаю модель SVC как Flask веб-приложения, так что часть накладных расходов исчезла (unpickling), но времена предсказания для одиночных документов все еще находятся на высокой стороне (0.25s). Я просмотрел код в методах predict
, но не могу понять, есть ли способ «предварительно разогревать» их, заранее перестраивая структуру данных LibSVM при запуске сервера ... любые идеи?
def predict(self, X):
"""Perform classification on samples in X.
For an one-class model, +1 or -1 is returned.
Parameters
----------
X : {array-like, sparse matrix}, shape = [n_samples, n_features]
Returns
-------
y_pred : array, shape = [n_samples]
Class labels for samples in X.
"""
y = super(BaseSVC, self).predict(X)
return self.classes_.take(y.astype(np.int))
Не используйте 'SVC' для классификации текста, это не стоит. –
Привет, я понимаю, что вы имеете в виду, но я должен был указать, что это многоклассовая классификация чувств (очень разные размеры классов). Пока я пытаюсь достичь максимальной точности. До сих пор SVC с ядрами RBF превосходил каждый другой классификатор, хотя и с небольшим отрывом (например, SVC 0.898, PassiveAggressiveClassifier 0.868, MultinomialNB 0.837). Однако SVC в значительной степени превосходит конкуренцию с наименьшими классами (например, F1 SVC 0.84, PAC 0.76, MNB 0.68). Если бы SVC был немного быстрее с одним документом, я бы не видел причин не использовать его с моими текущими данными. – emiguevara