我正在解决这个机器学习问题(来自之前的 Kaggle 练习竞赛:https://www.kaggle.com/c/nyc-taxi-trip-duration)并且我正在尝试使用 XGBoost 但收到一个错误,我不知道如何解决。我在谷歌和堆栈溢出上搜索,但找不到有类似问题的人。
我通过 Anaconda 将 python 2.7 与 Spyder IDE 结合使用,并且使用的是 Windows 10。我在安装 xgboost 软件包时确实遇到了一些问题,所以我不会完全消除这可能是安装错误的想法。不过,我也在学习关于 ML 的 Udemy 课程,我能够在小型数据集上很好地使用 xgboost,并且我使用相同的函数。
代码非常简单:
... import libraries
# import dataset
dataset = pd.read_csv('data/merged.csv')
y = dataset['trip_duration'].values
del dataset['trip_duration'], dataset["id"], dataset['distance']
X = dataset.values
# Split dataset into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
# fit XGBoost to training set
classifier = XGBClassifier()
classifier.fit(X_train, y_train)
但是它会抛出以下错误:
In [1]: classifier.fit(X_train, y_train)
Traceback (most recent call last):
File "<ipython-input-44-f44724590846>", line 1, in <module>
classifier.fit(X_train, y_train)
File "C:\Users\MortZ\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 464, in fit
verbose_eval=verbose)
File "C:\Users\MortZ\Anaconda3\lib\site-packages\xgboost\training.py", line 204, in train
xgb_model=xgb_model, callbacks=callbacks)
File "C:\Users\MortZ\Anaconda3\lib\site-packages\xgboost\training.py", line 74, in _train_internal
bst.update(dtrain, i, obj)
File "C:\Users\MortZ\Anaconda3\lib\site-packages\xgboost\core.py", line 819, in update
_check_call(_LIB.XGBoosterUpdateOneIter(self.handle, iteration, dtrain.handle))
WindowsError: [Error -529697949] Windows Error 0xE06D7363
如何解决这个问题?
经过几天的努力,我终于找到了解决方案。
我的一个朋友告诉 xgboost 已知 python 2.7 有问题,所以我将其升级到 3.6 这并没有完全解决我的问题,但给了我一个已知错误:
OSError: [WinError 541541187] Windows Error 0x20474343
经过一番挖掘,我找到了解决方案。我试图使用的拟合函数是问题的根源(尽管它确实在不同的数据集上工作,所以我不完全确定为什么......)。
改变
classifier = XGBClassifier()
classifier.fit(X_train, y_train)
到
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
watchlist = [(dtrain, 'train'), (dtest, 'test')]
xgb_pars = {'min_child_weight': 1, 'eta': 0.5, 'colsample_bytree': 0.9,
'max_depth': 6, 'subsample': 0.9, 'lambda': 1., 'nthread': -1, 'booster' : 'gbtree', 'silent': 1, 'eval_metric': 'rmse', 'objective': 'reg:linear'}
model = xgb.train(xgb_pars, dtrain, 10, watchlist, early_stopping_rounds=2, maximize=False, verbose_eval=1)
print('Modeling RMSLE %.5f' % model.best_score)
我猜这个错误是因为您使用 XGBClassfier 而不是 XGBRegressor 来解决回归问题。