【问题标题】:XGBoost get classifier object form booster object?XGBoost 从助推器对象中获取分类器对象?
【发布时间】:2020-01-01 01:11:18
【问题描述】:

我通常会使用

regr = XGBClassifier()
regr.fit(X, y)
regr.feature_importances_

类型(regr)在哪里。

但是,我有一个腌制的 mXGBoost 模型,它在解压时返回一个类型为 的对象。这与我运行 regr.get_booster() 的对象相同。

我找到了一些从助推器对象获取可变重要性的解决方案,但是有没有办法从助推器对象获取分类器对象,这样我就可以应用相同的 feature_importances_ 命令?这似乎是最直接的解决方案,或者似乎我必须编写一个模仿 feature_importances_ 输出的函数,以使其适合我记录的特征重要性...

所以理想情况下我会有类似的东西

xbg_booster = pickle.load(open("xgboost-model", "rb"))
assert str(type(xgb_booster)) == "<class 'xgboost.core.Booster'>", 'wrong class'
xgb_classifier = xgb_booster.get_classifier()
xgb_classifier.feature_importances_

在查找分类器方面,使用助推器对象可以做什么有任何限制吗?我想有一些保存/加载/转储的组合可以让我得到我需要的东西,但我现在被卡住了......

另外,对于上下文,腌制模型是 AWS sagemaker 的输出,所以我只是将其解压缩以进行进一步评估

【问题讨论】:

    标签: scikit-learn classification xgboost sklearn-pandas


    【解决方案1】:

    根据我自己尝试从 SageMaker 生成的助推器对象重新创建分类器的经验,我了解到以下内容:

    1. 似乎无法从助推器中重新创建分类器。 :(
    2. https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.Booster 有助推器类的详细信息,因此您可以查看它的功能。

    你可以做一些疯狂的事情:

    1. 可以创建一个分类器对象,然后覆盖其中的助推器:

      xgb_classifier = xgb.XGBClassifier(**xgboost_params)

      [..]

      xgb_classifier._Boster = 助推器

    这几乎没用,除非你适合它,否则它没有任何特征数据。 (我没有通过这个场景来验证拟合是否会提供功能所需的特征数据。)

    1. 您可以从分类器中删除 booster 对象,然后直接使用 xgboost 腌制分类器。然后稍后将 SageMaker 助推器恢复到其中。这种可憎的东西更接近并且似乎有效,但并不是仅来自 SageMaker 输出的真正的再水化分类器对象。

    推荐

    如果您不习惯使用 SageMaker 训练解决方案,您当然可以直接使用 XGBoost 进行训练。此时,您可以访问转储/保存数据以在不同上下文中使用所需的一切。

    我知道您追求功能​​重要性,所以我希望这能让您更接近,我有一个不同的用例,最终能够利用助推器来满足我的需要。

    【讨论】:

    • 这很奇怪,我可以通过 xgb_classifier = xgb.XGBClassifier() --> xgb_classifier._Boster = booster --> xgb_classifier.feature_importances 获得特征重要性
    猜你喜欢
    • 2018-09-09
    • 2016-08-26
    • 2010-12-21
    • 2012-06-03
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多