Как оптимизировать использование n_jobs во вложенных объектах sklearn? - PullRequest
1 голос
/ 28 мая 2020
• 1000

Если мне нужно выбрать, кажется, что лучшие места для распараллеливания будут внутри самих классификаторов, а не в StackingClassifier, поскольку он должен только запускать перекрестную проверку, а не построение дерева, однако даже при установке n_jobs = 1 в StackingClassifier, Random Forest использует все ядра, но тогда xgboost не использует более одного ядра. Как я могу настроить это так, чтобы xgboost использовал все доступные ядра?

rfc = RandomForestClassifier(
                            n_estimators=1000,
                            max_depth=None,
                            max_features = 0.2,
                            bootstrap=True,
                            random_state=0,
                            verbose=2,
                            n_jobs=-1
                            )

xgb = XGBClassifier(
                    n_estimators=1000,
                    max_depth=24,
                    max_features=0.2,
                    bootstrap=True,
                    objective="multi:softprob",
                    num_class=2,
                    colsample_bytree=0.3,
                    gamma=1, 
                    learning_rate=0.01,
                    subsample=0.9,
                    random_state=0,
                    verbosity=2,
                    nthread=-1,
                    n_jobs=-1)
estimators = [
    ('rfc', rfc)
    ]


stacker = StackingClassifier(
                    estimators=estimators, 
                    final_estimator=xgb,
                    stack_method="predict_proba",
                    verbose=2,
                    cv=2,
                    n_jobs=1,
                    passthrough=True)

calibrator = CalibratedClassifierCV(
                                    base_estimator = stacker,
                                    method="sigmoid",
                                    cv=2) 
...