Ускорение логистической регрессии 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')