问题描述
我有一个 imblearn (不是sklearn)管道,该管道包括以下步骤:
- 列选择器
- 预处理管道(在不同列上具有OneHotEncoders和CountVectorizers的ColumnTransformer)
- imblearn的SMOTE
- XGBClassifier
我有一个表格数据集,我正在尝试解释我的预测。 我设法通过一些工作得出了重要特征图,但都无法做到 eli5或石灰起作用。
Lime要求我将数据转换为上一次转换之前的状态(因为管道中的转换器(如自定义矢量化器会创建新列))。
原则上,我可以像这样对我的管道进行切片:pipeline[:-1].predict(instance)
。但是,出现以下错误:{AttributeError}'SMOTE' object has no attribute 'predict'
。
我还尝试了eli5解释器,因为它据说可以与Sklearn Pipelines一起使用。
但是,在运行eli5.sklearn.explain_prediction.explain_prediction_sklearn_not_supported(pipeline,instance_to_explain)
之后,我收到一条消息,提示不支持分类器。
将感谢有关如何进行此操作的任何想法。
解决方法
在预测期间,Imblearn的采样器实际上是无操作(即身份)转换器。因此,在安装管道之后,将它们删除是安全的。
尝试以下工作流程:
- 构造一个Imblearn管道,并将其安装。
- 将已安装的Imblearn管道的步骤提取到新的Scikit-Learn管道。
- 删除SMOTE步骤。
- 使用标准的Scikit-Learn管道解释工具解释您的预测。