Ускорение логистической регрессии sklearn

у меня есть модель, которую я пытаюсь построить, используя LogisticRegression на sklearn это имеет пару тысяч функций и примерно 60 000 образцов. Я пытаюсь соответствовать модели, и она работает уже около 10 минут. Машина, на которой я ее запускаю, имеет гигабайты ОЗУ и несколько ядер в своем распоряжении, и мне было интересно, есть ли способ ускорить процесс

редактировать Машина имеет 24 сердечника и здесь выход верхней части для того чтобы дать идею память!--9-->

Processes: 94 total, 8 running, 3 stuck, 83 sleeping, 583 threads      20:10:19
Load Avg: 1.49, 1.25, 1.19  CPU usage: 4.34% user, 0.68% sys, 94.96% idle
SharedLibs: 1552K resident, 0B data, 0B linkedit.
MemRegions: 51959 total, 53G resident, 46M private, 676M shared.
PhysMem: 3804M wired, 57G active, 1042M inactive, 62G used, 34G free.
VM: 350G vsize, 1092M framework vsize, 52556024(0) pageins, 85585722(0) pageouts
Networks: packets: 172806918/25G in, 27748484/7668M out.
Disks: 14763149/306G read, 26390627/1017G written.

Я пытаюсь обучить модель со следующими

classifier = LogisticRegression(C=1.0, class_weight = 'auto')
classifier.fit(train, response)

train имеет строки длиной около 3000 (все с плавающей запятой) и каждую строку в response либо 0 или 1. У меня около 50 000 наблюдений!--9-->

4 ответов


обновление - 2017:

в текущей версии scikit-learn,LogisticRegression() и n_jobs параметр для использования нескольких ядер.

однако фактический текст руководства пользователя предполагает, что несколько ядер все еще используются только во второй половине вычисления. Начиная с этого обновления, пересмотренное руководство пользователя для LogisticRegression теперь говорит, что njobs выбирает "количество ядер процессора, используемых во время цикла перекрестной проверки", тогда как два других пункты, указанные в первоначальном ответе,RandomForestClassifier() и RandomForestRegressor(), оба утверждают, что njobs указывает "количество заданий для параллельного выполнения как для fit, так и для predict". Другими словами, намеренный контраст в формулировке здесь, кажется, указывает на то, что


попробуйте уменьшить размер набора данных и изменить параметр допуска. Например, вы можете попробовать classifier = LogisticRegression(tol = 0.1)


стоит отметить, что сейчас LogisticRegression() принимает num_jobs в качестве входных данных и по умолчанию 1.

прокомментировал бы принятый ответ, но недостаточно очков.


решатель по умолчанию для LogisticRegressin в sklearn составляет liblinear который является подходящим решателем для обычных наборов данных. Для больших наборов данных попробуйте стохастические решатели градиентного спуска, такие как sag:

model = LogisticRegression(solver='sag')