XGRegressor不适合数据

时间:2017-10-12 11:03:49

标签: scikit-learn python-3.6 xgboost

我想在我的X_train,y_train数据上运行XGBoost树回归的CV。我的目标是从25到40的整数值。我试图在我的训练数据集上运行此代码

# A parameter grid for XGBoost
from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV
cv_params = {
    'min_child_weight': [1, 3, 5], 
    'gamma': [0.5, 1, 2, 3],  
    'subsample': [i/10.0 for i in range(6,11)],
    'colsample_bytree': [i/10.0 for i in range(6,11)], 
    'max_depth': [3, 5, 7],
    'learning_rate': [0.01, 0.02, 0.1]
    }
# Initialize XGB
xgb_for_gridsearch = XGBRegressor(
    n_estimators = 1000, 
    objective = 'reg:logistic', 
    seed = 7
    ) 
# Initialize GridSearch
xgb_grid = GridSearchCV(
    estimator = xgb_for_gridsearch, 
    param_grid = cv_params,
    scoring = 'explained_variance', 
    cv = 5, 
    n_jobs = -1
    )
xgb_grid.fit(X_train, y_train)
xgb_grid.grid_scores_

我得到一个错误fit()。 我有点期待简历会花费很长时间,但不是真的错误。错误输出是几千行,所以我只将与我的代码相关的唯一部分放在:

During handling of the above exception, another exception occurred:

JoblibXGBoostError                        Traceback (most recent call last)
<ipython-input-44-a5c1d517107d> in <module>()
     25     )
     26 
---> 27 xgb_grid.fit(X_train, y_train)

有谁知道这与什么有关? 我使用冲突的参数吗? 使用xgboost.cv()会更好吗? 我还可以添加整个错误代码,如果这会有所帮助,我是否应该在这个问题的底部添加它?

更新:根据建议XGRegressor_not_fitting_data向Gist添加了错误,因为错误太长了。

1 个答案:

答案 0 :(得分:1)

感谢您添加完整的错误代码,它更容易为您提供帮助。 github repo很好,但你可能会发现使用https://gist.github.com/https://pastebin.com/

更容易

请注意,完整错误的最有用的行通常是最后一行,其中包含:

label must be in [0,1] for logistic regression

您似乎在代码中使用了逻辑回归(objective = 'reg:logistic',),这是一种分类丢失,因此需要y_train为0或1的数组。

您可以使用

之类的内容轻松修复它
y_train_bin = (y_train == 1).astype(int)
xgb_grid.fit(X_train, y_train_bin)