Scikit学习中的特征选择遇到混合变量类型的问题



我目前正在尝试为我拥有的数据集进行特征选择。大约有50个变量,其中35个是分类的,每个变量要么是二进制的,要么有<5个可能的值。我试图在预处理之前获得大约15个输入变量。

我正在尝试在scikit学习中使用递归特征消除和交叉验证(RFECV(。因为存在连续变量和分类变量的混合,所以当我对我有两个问题的分类进行热编码时,我遇到了一些问题:

  1. RFE仍然可以使用one-hot编码吗?它是否准确
  2. 如何在对所选功能进行热编码之前获取对应的列?例如,如果它告诉我保留第20列,那么在预处理之前,我如何知道它对应于哪一列,以便将其保留为原始输入变量

我不打算包括预处理,但它所做的只是估算和一个热编码,不删除任何列。

这是我拥有的两个RFECV对象:

clf = SVC(kernel="linear")
rfecv = RFECV(estimator=clf, step=1, cv=StratifiedKFold(10), scoring="balanced_accuracy")
rfecv.fit(x_train, y_train)

clf2 = ExtraTreesClassifier(random_state=RANDOM_SEED)
rfecv2 = RFECV(estimator=clf2, step=1, cv=StratifiedKFold(10), scoring="balanced_accuracy")
rfecv2.fit(x_train, y_train)
  1. 一个热编码可以将分类特征转换为离散特征。你应该问问自己RFE是否适用于分类数据(答案:取决于估计器(,但它适用于二进制特征。最终,一个热编码只是一组二进制特征。即使使用一个热编码,精度也应该很好。

  2. 不幸的是;"自动";这样做的方法。你必须以某种方式手动完成。我能想到的最好的自动化方法是保存映射,然后使用它。例如,保存dict:my_dict = {"Food_Pizza" : "Food", "Food_Pasta" : "Food"}。然后您只需要调用orig_column = my_dict[new_column]就可以获得正则列。其他选项取决于命名和一个热编码的功能。例如,如果所有的一个热编码都是";FeatureName_value;(就像在熊猫假人中一样(你可以解析名字,并在"_"烧焦

最新更新