Scikit learn XGBoost从助推器对象获取分类器对象?

Scikit learn XGBoost从助推器对象获取分类器对象?,scikit-learn,classification,xgboost,sklearn-pandas,Scikit Learn,Classification,Xgboost,Sklearn Pandas,我通常使用 regr = XGBClassifier() regr.fit(X, y) regr.feature_importances_ 其中类型(regr)为 但是,我有一个pickle mXGBoost模型,解包后返回类型为的对象。这与我运行regr.get_booster()时使用的对象相同 我已经找到了一些从增压器对象获取可变重要性的解决方案,但是有没有一种方法可以从增压器对象获取分类器对象,这样我就可以应用相同的feature\u importances\u命令?这似乎是最简单的解

我通常使用

regr = XGBClassifier()
regr.fit(X, y)
regr.feature_importances_
其中类型(regr)为

但是,我有一个pickle mXGBoost模型,解包后返回类型为的对象。这与我运行regr.get_booster()时使用的对象相同

我已经找到了一些从增压器对象获取可变重要性的解决方案,但是有没有一种方法可以从增压器对象获取分类器对象,这样我就可以应用相同的feature\u importances\u命令?这似乎是最简单的解决方案,或者我必须编写一个函数来模拟feature_importances_uu的输出,以便它适合我记录的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_
xbg\u增压器=pickle.load(打开(“xgboost型号”、“rb”))
断言str(类型(xgb\u booster))==“”,“错误的类”
xgb_分类器=xgb_助推器。获取_分类器()
xgb\u分类器。特征\u重要性_
在寻找分类器方面,助推器对象的操作是否有任何限制?我想有一些保存/加载/转储的组合可以满足我的需要,但我现在陷入困境


同样在上下文中,pickled模型是AWS sagemaker的输出,因此我只是将其解包以进行进一步的评估

根据我自己的经验,尝试从sagemaker生成的助推器对象中重新创建分类器,我学到了以下几点:

  • 似乎无法从助推器重新创建分类器:(
  • 有助推器类的详细信息,以便您可以回顾它可以做什么
  • 你可以做的疯狂事情:

  • 您可以创建一个分类器对象,然后覆盖其中的增压器:

    xgb_分类器=xgb.XGBClassifier(**xgboost_参数)

    [……]

    xgb_分类器。_Boster=助推器

  • 除非您对其进行拟合,否则这几乎是无用的,否则它没有任何功能数据。(我没有在整个场景中验证拟合是否会提供功能所需的功能数据。)

  • 您可以从分类器中移除增压器对象,然后直接使用xgboost对分类器进行酸洗。然后再将SageMaker增压器还原回分类器中。这种讨厌的东西比较接近,似乎可以工作,但实际上并不是仅从SageMaker输出中重新水合的分类器对象
  • 建议

    如果您没有使用SageMaker培训解决方案,您当然可以直接使用XGBoost进行培训。此时,您可以访问转储/保存数据以在不同环境中使用所需的所有内容


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

    根据我自己的经验,尝试从SageMaker生成的增压器对象中重新创建分类器,我学到了以下几点:

  • 似乎无法从助推器重新创建分类器:(
  • 有助推器类的详细信息,以便您可以回顾它可以做什么
  • 你可以做的疯狂事情:

  • 您可以创建一个分类器对象,然后覆盖其中的增压器:

    xgb_分类器=xgb.XGBClassifier(**xgboost_参数)

    [……]

    xgb_分类器。_Boster=助推器

  • 除非您对其进行拟合,否则这几乎是无用的,否则它没有任何功能数据。(我没有在整个场景中验证拟合是否会提供功能所需的功能数据。)

  • 您可以从分类器中移除增压器对象,然后直接使用xgboost对分类器进行酸洗。然后再将SageMaker增压器还原回分类器中。这种讨厌的东西比较接近,似乎可以工作,但实际上并不是仅从SageMaker输出中重新水合的分类器对象
  • 建议

    如果您没有使用SageMaker培训解决方案,您当然可以直接使用XGBoost进行培训。此时,您可以访问转储/保存数据以在不同环境中使用所需的所有内容


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

    这太奇怪了,我能够通过xgb_classifier=xgb.XGBClassifier()获得功能重要性-->xgb\U分类器。-->xgb\U分类器。功能重要性这很奇怪,我可以通过xgb\U分类器=xgb.XGBClassifier()-->xgb\U分类器获得功能重要性。-->xgb\U分类器。-->