【问题标题】:Meaningfully interpreting BaseN encoded feature importances有意义地解释 BaseN 编码的特征重要性
【发布时间】:2021-11-24 10:13:09
【问题描述】:
我有用户出生地的数据,特别是城市。由于我的数据集中有几千个城市,因此我寻找 OneHot 编码的替代方案,因为我不想为单个列添加数千列到我的数据集中。我发现 BaseN 编码是 OneHot 的一个很好的替代方案,所以我选择了它。我用基数 4 对数据进行了编码,所以现在我有数字列 City_0、City_1 等,而不是字符串列 City。
但是,在使用随机森林分类器对数据集建模后,我发现某些 City_# 变量是最重要的特征之一。但是我如何解释这个结果呢?由于城市已被编码为 4 个单独的列,我如何得出实际结论(例如,哪些城市对我的目标变量影响最大)?有没有一种方法,或者我通过这种方式对城市进行编码完全失去了可解释性?
【问题讨论】:
标签:
machine-learning
encoding
interpretation
base-n
【解决方案1】:
您可以使用SkLearn2PMML 包将您的管道导出为PMML 数据格式;在转换过程中,BaseN编码被撤消,这样可以很容易地看到哪些城市在哪个方向流动。
转换示例:
from sklearn2pmml import sklearn2pmml
from sklearn2pmml.pipline import PMMLPipeline
mapper = ColumnTransformer([
("cat", BaseNEncoder(base = 4), cat_cols),
("cont", "passthrough", cont_cols)
])
classifier = RandomForestClassifier()
pipeline = PMMLPipeline([
("mapper", mapper),
("classifier", classifier)
])
pipeline.fit(X, y)
pipeline.pmml_feature_importances_ = classifier.feature_importances_
pipeline.configure(numeric = True)
sklearn2pmml(pipeline, "MyInterpretablePipeline.pmml")
如果您将转换选项切换为numeric = False,则 BaseN 编码将完全撤消,以便将城市名称直接嵌入到 RF 数据结构中。
在任何情况下,PMML 都是最人性化的数据格式,用于持久化拟合的 ML 管道。 PMML 是 XML 的子集,因此可以使用任何文本编辑器打开、查看和编辑这些文件。