【问题标题】:Feature selection in pythonpython中的特征选择
【发布时间】:2017-12-10 06:56:53
【问题描述】:

我正在尝试使用多种技术在 python 中执行特征选择。我尝试应用的第一个技术是仅使用特征的变化来选择特征。我的代码如下:

def feature_selection_technique(train, test, lbls, technique):
   if technique == "variance":
        sel = VarianceThreshold(threshold=(0.00010 * (1 - .15)))
        model1 = sel1.fit_transform(face_train)
        new_train = model1.transform(train)
        new_test = model1.transform(test)

    return new_train, new_test

实际上,我想使用训练数据集计算所选特征,然后将其应用于测试数据集。在这种情况下,似乎不能使用 transform 方法。在这种情况下我该怎么办?

【问题讨论】:

  • 您是否尝试过:model1 = sel.fit_transform(train) 使用类似:model2 = sel.fit_transform(test)?
  • 是的,但这不是我想要的。该技术使具有方差的特征大于建议的阈值。我想保留训练集中的这些特征,并将相同的特征保留给测试集。
  • 在第一个 sel = VarianceThreshold(threshold=(0.00010 * (1 - .15))) 之后直接调用 new_train=sel.fit_transform(train) 和 new_test = sel.transform(test) 这应该有效很好
  • fit_transform 返回更改数据集的数组(在您的情况下为model1)。然后你使用model1.transform(train)??你确定你的代码是正确的吗?

标签: python scikit-learn feature-selection


【解决方案1】:

我认为您使用的语法有问题。请参阅文档和示例 here。正确的语法如下:

def feature_selection_technique(train, test, lbls, technique):
   if technique == "variance":
        sel = VarianceThreshold(threshold=(0.00010 * (1 - .15)))
        new_train=sel.fit_transform(train)
        new_test = sel.transform(test)

    return new_train, new_test

也就是说,你应该初始化sel,然后将其拟合到训练数据并对其进行变换,然后再对测试数据进行变换。

【讨论】:

  • 是的,这是完美的。感谢您的解决方案。
猜你喜欢
  • 2019-05-15
  • 1970-01-01
  • 2020-11-15
  • 2020-07-31
  • 2016-07-27
  • 2013-02-21
  • 2016-01-27
相关资源
最近更新 更多