Logit.fit_regularized от Statsmodels работает вечно - PullRequest
0 голосов
/ 05 ноября 2018

В последнее время я пытался приспособить Регуляризованную Логистическую Регрессию к векторизованным текстовым данным. Сначала я попробовал с sklearn, и у меня не было проблем, но потом я обнаружил, что не могу сделать вывод через sklearn, поэтому я попытался переключиться на statsmodels. Проблема в том, что когда я пытаюсь установить logit, он продолжает работать вечно и использует около 95% моей оперативной памяти (пробовал на компьютерах с 8 и 16 ГБ ОЗУ).

Мое первое предположение было связано с размерностью, потому что я работал с матрицей 2960 x 43k. Итак, чтобы уменьшить его, я удалил биграммы и взял выборку только из 100 наблюдений, что оставляет мне матрицу 100 x 6984, что, я думаю, не должно быть слишком проблематичным.

Это небольшой пример моего кода:

for train_index, test_index in sss.split(df_modelo.Cuerpo, df_modelo.Dummy_genero):

   X_train, X_test = df_modelo.Cuerpo[train_index], df_modelo.Cuerpo[test_index]
   y_train, y_test = df_modelo.Dummy_genero[train_index], df_modelo.Dummy_genero[test_index]


cvectorizer=CountVectorizer(max_df=0.97, min_df=3, ngram_range=(1,1) )
vec=cvectorizer.fit(X_train)
X_train_vectorized = vec.transform(X_train)

Это дает мне поезд и набор тестов, а затем векторизует текст из X_train. Тогда я пытаюсь:

import statsmodels.api as sm

logit=sm.Logit(y_train.values,X_train_vectorized.todense())
result=logit.fit_regularized(method='l1')

Все работает нормально до строки result, которая работает вечно. Есть ли что-то, что я могу сделать? Должен ли я переключиться на R, если я ищу статистический вывод?

Заранее спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Почти все statsmodels и все выводы предназначены для случая, когда количество наблюдений намного больше, чем количество признаков.

Logit.fit_regularized использует алгоритм внутренней точки с оптимизаторами scipy, который должен хранить все функции в памяти. Вывод параметров требует ковариации оценки параметра, которая имеет форму n_features от n_features. Вариант использования, для которого он был разработан, - это когда число признаков относительно мало по сравнению с количеством наблюдений, и гессиан может использоваться в памяти.

GLM.fit_regularized оценивает штрафные параметры эластичной сети и использует координату по убыванию. Это может обрабатывать большое количество функций, но не дает никаких выводов.

Вывод после Лассо и аналогичное наказание для выбора переменных было доступно только в недавних исследованиях. См., Например, выборочный вывод в Python https://github.com/selective-inference/Python-software, для которого также доступен пакет R.

...