【问题标题】:xgboost.train versus XGBClassifierxgboost.train 与 XGBClassifier
【发布时间】:2022-03-16 17:29:31
【问题描述】:

我正在使用 python 逐步拟合 xgboost 模型(逐块)。我遇到了一个使用 xgboost.train 的解决方案,但我不知道如何处理它返回的 Booster 对象。例如,XGBClassifier 有 fit、predict、predict_proba 等选项。

这是我在数据中一点一点读取的 for 循环内部发生的情况:

dtrain=xgb.DMatrix(X_train, label=y)
param = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic'}
modelXG=xgb.train(param,dtrain,xgb_model='xgbmodel')
modelXG.save_model("xgbmodel")

【问题讨论】:

    标签: python scikit-learn xgboost


    【解决方案1】:

    XGBClassifier 是一个 scikit-learn 兼容类,可以与其他 scikit-learn 实用程序结合使用。

    除此之外,它只是xgb.train 的包装,您不需要在其中提供高级对象,如Booster 等。

    只需将您的数据发送到fit()predict() 等,它就会在内部自动转换为适当的对象。

    【讨论】:

    • 是的,这正是我所做的,并且有效。谢谢。
    【解决方案2】:

    我不完全确定您的问题是什么。 xgb.XGBMClassifier.fit() 在后台调用 xgb.train(),所以我们需要匹配相关函数的参数。

    如果你对如何实施你的想法感兴趣,那么你可以做

    clf = xgb.XGBClassifier(**params)
    clf.fit(X, y, xgb_model=your_model)
    

    请参阅documentation here。在每次迭代中,您都必须使用 clf.get_booster().save_model(xxx) 之类的东西来保存助推器。

    PS 我希望你做小批量学习,即块而不是逐行学习,即逐个例子,因为每次都写入/读取模型会导致性能下降

    【讨论】:

    • 感谢您的评论。顺便说一句,我正在考虑您刚才所说的内容,并且正在最大限度地减少从硬盘读取数据的次数。我大量读取数据,然后在内部进一步划分。
    • @Max 这很有意义并加快了训练速度。出于我的好奇心,唯一的问题是:如果你在内存中大量阅读,为什么你想要/需要将它们分成更小的块进行训练?一个人经常这样做(小批量训练)用于 NN 训练,但我不知道它也适用于 GBM
    猜你喜欢
    • 2021-04-10
    • 2016-05-24
    • 2023-01-17
    • 2016-11-07
    • 2020-09-24
    • 2016-04-13
    • 2021-06-21
    • 2020-12-24
    • 2017-09-15
    相关资源
    最近更新 更多