使用 one-hot 编码后如何获取原始特征名称

数据挖掘 特征选择 决策树 一热编码 虚拟变量
2022-02-04 23:42:54

这个问题是关于 scikit-learn 的实现方面的DecisionTreeClassifier()

如何从feature_importances_scikit-learn 返回的功能名称中按降序排列DecisionTreeClassifier()

问题是分类器的输入特征不是原始特征——它们是来自 pandas DataFrame get_dummies 的数字编码特征。

例如,我从 UCI 存储库中获取蘑菇数据集。数据集中的特征包括 - cap_shapecap_surfacecap_colorodor等。

pandas dataframe getdummies 根据原始特征的值将这些编码为多个特征。cap_shape有值 b,c,f,k...在编码新列之后是cap_shape_b, cap_shape_c, cap_shape_f. 其他功能也会发生类似的转变。

训练后,分类器告诉我前两个特征是: cap_shape_b, cap_shape_c, cap_shape_f, odor_a,odor_c, odor_f,odor_l根据分类器抛出的这个结果,我希望我的函数返回原始特征,即cap_shapeodor

3个回答

考虑在模块中使用 one-hot 编码器category_encoders进行编码。它有一种inverse_transform方法,我相信可以将您的单热编码数据转换回其原始形式。

如果您只需要原始功能的名称,您可以使用正则表达式来解析它们。您可以轻松地确定转换特征的命名约定(使用 中的前缀参数get_dummies)。获得分数后,您可以按升序/降序遍历特征列表并使用正则表达式解析列名,使用有序 dict 存储结果。

如果您需要将整个数据集转换回来,请使用inverse_transform其他答案中提到的方法。

如“分类”部分的这些文档中所示,您可以使用 graphviz 导出树(它声明您也必须安装 graphviz 包)。这样,您就可以可视化算法构建的树。关于输入特征从原始特征转换的问题,这是算法无法帮助您解决的问题,但如果您自己进行了转换,您应该能够自己管理。

任何进一步的疑问,评论。