【问题标题】:Recursive Feature Elimination on Categorical Data in sklearn?sklearn中分类数据的递归特征消除?
【发布时间】:2015-04-08 18:51:33
【问题描述】:

我有一个包含 8 个参数(4 个连续 4 个分类)的数据集,我正在尝试根据 Scikit 中的 RFEC 类消除特征。

这是我使用的公式:

svc = SVC(kernel="linear")
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(y, 2),
          scoring='accuracy')
rfecv.fit(X, y)

由于我也有分类数据,因此我使用 dmatrics (Patsy) 将其更改为虚拟变量。

我想在特征选择后对数据尝试不同的分类模型,以与 SVC 一起改进模型。

我在转换数据后运行 RFE,我认为我做错了。
我们是在转换分类数据之前还是之后运行 RFECV?

我在任何文件中都找不到任何明确的指示。

【问题讨论】:

    标签: scikit-learn categorical-data rfe


    【解决方案1】:

    这取决于您是要选择分类变量还是整个变量的给定值。 您当前正在选择分类变量的单个设置(又名级别)。 要选择整个变量,您可能需要做一些小技巧,根据 SVC 定义您自己的估算器。 您可以使用make_pipeline(OneHotEncoder(categorical_features), SVC()),但您需要将管道的coef_ 设置为反映输入形状的内容。

    【讨论】:

    • 谢谢安德烈亚斯。实际上我还没有尝试过 OneHotEncoder 方法,而是使用 Dmatrices 来转换分类数据。我在转换分类数据后运行 RFEC,它运行良好(给了我最佳数字)但是当我在转换分类数据之前尝试运行时,我收到错误“无法将字符串转换为浮点数”所以很困惑是否可以运行递归功能在转换之前对分类数据进行选择。再次感谢
    • 有人可能会说这是 RFE 中过于严格的输入验证。但是,由于我们目前并不真正支持管道上的功能选择,我不确定是否有充分的理由进行更改。
    • 再次感谢 所以假设 RFEC 可以而且应该在分类数据转换之后运行是否正确,无论是通过管道还是其他方法?现在说得通了
    • 并非如此。两者都是可能的,但做不同的事情。但是现在在 scikit-learn 中,在转换之前这样做并不能真正开箱即用。
    • 感谢您的澄清感谢它
    猜你喜欢
    • 2018-05-21
    • 2020-03-24
    • 2017-05-10
    • 2020-04-08
    • 2013-08-17
    • 2018-12-13
    • 2023-03-25
    • 2020-10-27
    • 2021-04-09
    相关资源
    最近更新 更多