2016-08-13 2 views
1

Я реализую многословную классификацию текста путем обучения 4709 отдельных бинарных логических классификаторов регрессии в Sklearn, используя HashingVectorizer [(n_features = 2 ** 24, binary = True, ngram_range = (1,2) ].Sklearn: Как ускорить решение Функция

Точность довольно хорошая, но задержка прогнозирования огромна. Среднее соотношение разреженности изученных матриц составляет 0,967, а форма матриц - (1, 16777216). Использование функции предсказания функции прогнозирования в течение одной записи составляет 147,9 сек. (на сервере с одним процессором Intel Xeon E5 2630v4). В большинстве случаев (80%) расходуется scipy редкая функция csc_tocsr.

Когда я предварительно обрабатываю матрицы с:

cf[i] = sparse.csr_matrix(clf.coef_.T) 

и сделать вывод вероятность (мне не нужна нормализация, только порядок вероятностей) непосредственно

prob[i] = x*cf[i] 

он принимает только 0,043 сек, чтобы вывести 407 (10%) классификаторов но потребление памяти 25GB, поэтому Мне понадобится около 250 ГБ оперативной памяти для хранения всех классификаторов в памяти.

Есть ли способ ускорить работу решения при сохранении матриц разреженных или каких-либо других способов предварительной обработки, которые занимают меньше памяти.

ответ

0

Чтобы ответить на мой вопрос, я нашел простое решение. Все матрицы коэффициентов могут комбинироваться (складываться) в один, который переносится и используется для вывода. Таким образом, загрузка кода/подготовка:

coefs = sparse.vstack([c.coef_ for c in clfs]) 
coefs = coefs.T 

где CLFS являются логистической регрессии классификаторы (но это работает для всех линейных классификаторов). Умозаключение код прост

x = vectorizer.fit_transform([q]) 
r = x*coefs 

Умозаключение время составляет менее 1/10 секунды в моем случае 4709 классификаторов.

Смежные вопросы