#python #machine-learning #dask #xgboost #dask-ml
Вопрос:
Я пытаюсь создать модель с помощью XGBoost.
Похоже, мне удается обучить модель, однако, когда я пытаюсь предсказать свои тестовые данные и увидеть фактическое предсказание, я получаю следующую ошибку:
Ошибка значения: данные должны быть одномерными
Вот как я пытался предсказать свои данные:
from dask_ml.model_selection import train_test_split
import dask
import xgboost
import dask_xgboost
from dask.distributed import Client
import dask_ml.model_selection as dcv
#split the data
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.33,random_state=42)
client = Client(n_workers=10, threads_per_worker=1)
#Trying to do hyperparamter running
model_xgb = xgb.XGBRegressor(seed=42,verbose=True)
params={
'learning_rate':[0.1,0.01,0.05],
'max_depth':[1,5,8],
'gamma':[0,0.5,1],
'scale_pos_weight':[1,3,5]
}
grid_search = GridSearchCV(model_xgb, params, cv=3, scoring='neg_mean_squared_error')
grid_search.fit(x_train, y_train)
#train data with best paraeters
bst = dask_xgboost.train(client, grid_search.best_params_, x_train, y_train, num_boost_round=10)
#predict data
dask_xgboost.predict(client, bst, x_test).persist()
Последняя строка с predict работает, но когда я добавляю вычисления в endd, чтобы увидеть фактический массив, я получаю размерную ошибку:
dask_xgboost.predict(client, bst, x_test).persist().compute()
>>>ValueError: Data must be 1-dimensional
Как я могу получить прогнозы с .predict
помощью?
Комментарии:
1. Что такое
x
иy
в вашем примере?2. @DaniMesejo это фреймы данных dask
3. TBH Я не думаю, что это ошибка dask, я думаю, вероятно, связана с формой x, y
4. @DaniMesejo форма x (как dask) (отложено (‘int-8agaae83-0059-42fc-873f-682m13115hgi’), 27), аналогично для y только с 1 столбцом . Однако, если я напечатаю x.compute().shape, я получу (28136, 23)
Ответ №1:
Как указано на pip
странице для dask-xgboost
:
Dask-XGBoost has been deprecated and is no longer maintained.
The functionality of this project has been included directly
in XGBoost. To use Dask and XGBoost together, please use
xgboost.dask instead
https://xgboost.readthedocs.io/en/latest/tutorials/dask.html.
В предоставленном вами коде есть несколько отсутствующих назначений и выражений (например, как x
определено, откуда GridSearchCV
импортируется). Несколько вещей, которые, вероятно, следует изменить:
# note the .dask
model_xgb = xgb.dask.DaskXGBRegressor(seed=42, verbose=True)
grid_search = GridSearchCV(model_xgb, params, cv=3, scoring='neg_mean_squared_error')
grid_search.fit(x_train, y_train)
#train data with best params
model_xgb.client = client
model_xgb.set_params(grid_search.best_params_)
model_xgb.fit(X_train, y_train, eval_set=[(X_test, y_test)])