Как я могу ускорить выполнение Multi-Class Classification? - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь обучить и запустить мультиклассовые классификаторы для случайного леса и логистической регрессии.На данный момент на моей машине, которая имеет 8 ГБ ОЗУ и ядро ​​i5, требуется довольно много времени для запуска, несмотря на то, что размер данных едва превышает 34 КБ.Есть ли способ, которым я могу ускорить текущее существующее время выполнения, настроив несколько параметров?

Я просто привожу пример для рандомизированного поиска по логистической регрессии ниже.

X.shape
Out[9]: (34857, 18)
Y.shape
Out[10]: (34857,)
Y.unique()
Out[11]: array([7, 3, 8, 6, 1, 5, 9, 2, 4], dtype=int64)
params_logreg={'C':[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0],
            'solver':['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],
            'penalty':['l2'],
            'max_iter':[100,200,300,400,500],
            'multi_class':['multinomial']}
folds = 2
n_iter = 2
scoring= 'accuracy'
n_jobs= 1

model_logregression=LogisticRegression()
model_logregression = RandomizedSearchCV(model_logregression,X,Y,params_logreg,folds,n_iter,scoring,n_jobs)

[CV] solver=newton-cg, penalty=l2, multi_class=multinomial, max_iter=100, C=0.9 
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[CV]  solver=newton-cg, penalty=l2, multi_class=multinomial, max_iter=100, C=0.9, score=0.5663798049340218, total= 2.7min
[CV] solver=newton-cg, penalty=l2, multi_class=multinomial, max_iter=100, C=0.9 
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:  2.7min remaining:    0.0s

[CV]  solver=newton-cg, penalty=l2, multi_class=multinomial, max_iter=100, C=0.9, score=0.5663625408848338, total= 4.2min
[CV] solver=sag, penalty=l2, multi_class=multinomial, max_iter=400, C=0.8 
[Parallel(n_jobs=1)]: Done   2 out of   2 | elapsed:  7.0min remaining:    0.0s

[CV]  solver=sag, penalty=l2, multi_class=multinomial, max_iter=400, C=0.8, score=0.5663798049340218, total=  33.9s
[CV] solver=sag, penalty=l2, multi_class=multinomial, max_iter=400, C=0.8 
[CV]  solver=sag, penalty=l2, multi_class=multinomial, max_iter=400, C=0.8, score=0.5664773053308085, total=  26.6s
[Parallel(n_jobs=1)]: Done   4 out of   4 | elapsed:  8.0min finished```


It's taking about 8 mins to run for Logistic Regression. In contrast RandomForestClassifier takes only about 52 seconds.

Is there any way in which I can make this run faster by tweaking the parameters?

1 Ответ

0 голосов
/ 10 июня 2019

Попробуйте нормализовать ваши данные для модели логистической регрессии. Нормализованные данные помогут модели быстро сходиться. У Scikit-learn есть несколько методов для этого, поэтому проверьте их раздел предварительной обработки для получения дополнительной информации об этом.

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

...