У меня есть большие модели SVC (~ 50 МБ cPickles) для классификации текста, и я пробую различные способы их использования в производственной среде. Классификация пакетов документов работает очень хорошо (около 1 тыс. документов в минуту с использованием как predict
, так и predict_proba
). Однако предсказание для одного документа — это совсем другая история, как объясняется в комментарии к этот вопрос:
Вы делаете прогнозы партиями? Метод SVC.predict, к сожалению, влечет за собой большие накладные расходы, поскольку он должен реконструировать структуру данных LibSVM, аналогичную той, которую создал обучающий алгоритм, выполнять неглубокое копирование опорных векторов и преобразовывать тестовые образцы в формат LibSVM, который может отличаться от форматов NumPy/SciPy. Следовательно, предсказание по одной выборке неизбежно будет медленным. – ларсманс
Я уже использую модели SVC в качестве веб-приложений Flask, поэтому часть накладных расходов исчезла (распаковка), но время прогнозирования для отдельных документов по-прежнему велико (0,25 с). Я просмотрел код в методах 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
для классификации текста, оно того не стоит. - person Fred Foo   schedule 30.01.2014