我通常使用以下方法来表达特征重要性
regr = XGBClassifier()
regr.fit(X, y)
regr.feature_importances_
其中 type(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_
在查找分类器方面,使用增强对象可以完成的操作是否有任何限制?我想有一些保存/加载/转储的组合可以让我得到我需要的东西,但我现在陷入困境......
另外,就上下文而言,pickled 模型是 AWS sagemaker 的输出,因此我只是将其解压以进行进一步的评估
根据我自己尝试从 SageMaker 生成的增强器对象重新创建分类器的经验,我了解到以下内容:
- 似乎不可能从助推器重新创建分类器。 :(
-
https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.Booster有关于增强类的详细信息,以便您可以查看它的功能。
然而你可以做一些疯狂的事情:
-
You can创建一个分类器对象,然后覆盖其中的助推器:
xgb_classifier = xgb.XGBClassifier(**xgboost_params)
[..]
xgb_classifier._Boster = 增强器
除非你安装它,否则它几乎没有任何功能数据。 (我并没有彻底完成这个场景来验证拟合是否会提供功能所需的特征数据。)
- 您可以从分类器中删除 booster 对象,然后直接使用 xgboost 对分类器进行 pickle。然后稍后将 SageMaker 助推器恢复到其中。这种令人厌恶的东西更接近并且似乎有效,但并不是真正仅来自 SageMaker 输出的再水化分类器对象。
推荐
如果您不纠结于使用 SageMaker 训练解决方案,您当然可以直接使用 XGBoost 进行训练。那时,您可以访问转储/保存数据以在不同上下文中使用所需的一切。
我知道您追求的是功能重要性,所以我希望这能让您更接近,我有一个不同的用例,并最终能够利用助推器来满足我的需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)