【问题标题】:Windows Error using XGBoost with python将 XGBoost 与 python 一起使用的 Windows 错误
【发布时间】:2018-09-23 01:24:29
【问题描述】:

所以我正在解决这个机器学习问题(来自之前的 Kaggle 练习竞赛:https://www.kaggle.com/c/nyc-taxi-trip-duration),我正在尝试使用 XGBoost,但遇到了一个我不知道如何解决的错误。我在谷歌和堆栈溢出上搜索,但找不到任何有类似问题的人。

我正在通过 Anaconda 使用带有 Spyder IDE 的 python 2.7,并且我在 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

我真的不知道如何解释这一点,因此非常感谢任何帮助。 提前致谢

莫特兹

【问题讨论】:

    标签: python-2.7 anaconda spyder xgboost


    【解决方案1】:

    经过几天的努力,我设法找到了解决方案。

    我的一个朋友告诉我 xgboost 已知在 python 2.7 上有问题,所以我将它升级到 3.6 这并没有完全解决我的问题,但给了我一个已知错误:

    OSError: [WinError 541541187] Windows Error 0x20474343
    

    经过一番挖掘,我找到了解决方案。我尝试使用的 fit 函数是问题的根源(尽管它确实适用于不同的数据集,所以我不完全确定为什么......)。

    解决方案

    改变

    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)
    

    【讨论】:

    • 确实解决了我完全相同的问题,但很想知道为什么常规拟合功能会消失。烦人。
    • 这对我有用。您共享的参数是默认值吗?添加 xgboost 默认值的完整字典可能会很好,或者在您的解决方案中澄清它们是否是这样的。
    【解决方案2】:

    我猜这个错误是因为您使用 XGBClassfier 而不是 XGBRegressor 来解决回归问题。

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 2019-12-12
      • 2016-10-21
      • 1970-01-01
      • 2021-03-23
      • 2016-12-24
      • 2023-02-15
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多