XGBoost моделирование в Даске - PullRequest
0 голосов
/ 01 апреля 2020

Мой набор данных содержит более 100 тыс. Наблюдений и 120 функций. Я хотел использовать XGBoost вместе с Dask Gridsearchcv, чтобы найти оптимальные параметры. Но он выдает ошибку. Пожалуйста, дайте мне знать, что я делаю неправильно

code:

import dask_ml.model_selection as dcv
import dask.dataframe as dd

pipe1=Pipeline(steps=[('clf',XGBClassifier(objective= 'binary:logistic'))])


search_space=[{'clf__n_estimators': [100,150, 200, 300], 
               'clf__max_depth': [4,6,9],
               'clf__learning_rate': [0.1, 0.01, 0.05],
               'clf__random_state': [0],
               'clf__subsample': [0.7,0.9,1], 
               'clf__colsamplebytree': [1.0, 0.9, 0.8]}] 

grid_cpu=dcv.GridSearchCV(estimator=pipe1, param_grid=search_space, cv=5, scoring='roc_auc', return_train_score=True, n_jobs=-1,refit="AUC",scheduler='threads')

grid_cpu.fit(dd.from_pandas(X,npartitions=1), dd.from_pandas(y,npartitions=1))

print("Best parameters found: ",grid_mse.best_params_)

print("Best ROC found: ", np.sqrt(np.abs(grid_mse.best_score_)))

Используемые здесь X и y изначально были pandas dataframe. Я пытаюсь преобразовать его в dask dataframe перед моделированием. Я предполагаю, что там что-то отсутствует.

Ошибка:

AssertionError                            Traceback (most recent call last)
<ipython-input-186-5a2967c1ae38> in <module>
     13 grid_cpu=dcv.GridSearchCV(estimator=pipe1, param_grid=search_space, cv=5, scoring='roc_auc', return_train_score=True, n_jobs=-1,
     14 refit="AUC",scheduler='threads')
---> 15 grid_cpu.fit(dd.from_pandas(X,npartitions=1), dd.from_pandas(y,npartitions=1))
     16 print("Best parameters found: ",grid_mse.best_params_)
     17 print("Best ROC found: ", np.sqrt(np.abs(grid_mse.best_score_)))

~\AppData\Local\Continuum\anaconda3\lib\site-packages\dask_ml\model_selection\_search.py in fit(self, X, y, groups, **fit_params)
   1231             error_score=error_score,
   1232             return_train_score=self.return_train_score,
-> 1233             cache_cv=self.cache_cv,
   1234         )
   1235 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\dask_ml\model_selection\_search.py in build_cv_graph(estimator, cv, scorer, candidate_params, X, y, groups, fit_params, iid, error_score, return_train_score, cache_cv)
    201 
    202     dsk = {}
--> 203     X_name, y_name, groups_name = to_keys(dsk, X, y, groups)
    204     n_splits = compute_n_splits(cv, X, y, groups)
    205 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\dask_ml\model_selection\utils.py in to_keys(dsk, *args)
     85             yield x.key
     86         else:
---> 87             assert not is_dask_collection(x)
     88             key = "array-" + tokenize(x)
     89             dsk[key] = x

AssertionError:

1 Ответ

0 голосов
/ 04 апреля 2020

Судя по ошибке утверждения, я предполагаю, что GridSearchCV Dask-ML работает с обычными объектами numpy / pandas, а не с объектами dask (хотя я точно не знаю). Нет необходимости добавлять dd.from_pandas звонки, которые у вас есть в этой строке:

grid_cpu.fit(dd.from_pandas(X,npartitions=1), dd.from_pandas(y,npartitions=1))

Вместо

grid_cpu.fit(X, y)
...