机器学习管道中的特征选择和超参数优化应该如何排序?

机器算法验证 特征选择 超参数 优化
2022-02-10 04:03:22

我的目标是对传感器信号进行分类。到目前为止,我的解决方案的概念是:i)原始信号的工程特征 ii)使用 ReliefF 和聚类方法选择相关特征 iii)应用 NN、随机森林和 SVM

然而,我陷入了两难境地。在 ii) 和 iii) 中,有超参数,如 ReliefF 的 k-Nearest Neigbours 或用于评估传感器信号的窗口长度,或 NN 每一层中隐藏单元的数量

我在这里看到了 3 个问题:1)调整特征选择参数会影响分类器的性能 2)优化分类器的超参数会影响特征的选择。3) 评估每种可能的配置组合是棘手的。

所以我的问题是:a)我可以做一个简化的假设,st 调整特征选择参数可以与调整分类器参数解耦吗?b) 还有其他可能的解决方案吗?

4个回答

就像您已经观察到自己一样,您对特征的选择(特征选择)可能会影响您的算法的哪些超参数是最优的,而您为算法选择的哪些超参数可能会影响哪些特征的选择是最优的。

所以,是的,如果你真的很关心从你的模型中挤出每一个百分比的性能,并且你能负担得起所需的计算量,那么最好的解决方案可能是“同时”进行特征选择和超参数调整。不过,这可能并不容易(取决于您如何进行功能选择)。我想象它的工作方式就像将不同的特征集作为候选者,并将从所有这些候选集中选择一组特征作为额外的超参数。

在实践中,这可能并不真正可行。一般来说,如果您无法评估所有可能的组合,我建议:

  1. 非常松散地优化超参数,只是为了确保您不会为某些超参数分配非常糟糕的值。如果您对超参数有很好的直观理解,这通常可以手动完成,或者通过非常简短的超参数优化过程完成,仅使用一堆您知道否则非常好的功能。

  2. 特征选择,超参数可能不是 100% 优化的,但至少也不是非常糟糕。如果你至少已经有一个配置得当的机器学习算法,那么拥有良好的特性对于你的性能将比微优化超参数重要得多。极端的例子:如果你没有特征,你就无法预测任何事情。如果你有一个包含类标签的作弊功能,你可以完美地对所有东西进行分类。

  3. 使用上述步骤中选择的特征优化超参数。现在这应该是一个很好的功能集,实际上可能值得稍微优化一下超参数。


为了解决 Nikolas 在评论中发布的其他问题,关于所有这些事情(特征选择、超参数优化)如何与 k 折交叉验证交互:我想说这取决于。

每当您将其中一个折叠中的数据用于任何事情,然后在同一折叠上评估性能时,您都会对您的性能进行有偏差的估计(您会高估性能)。因此,如果您在特征选择步骤中使用所有折叠中的数据,然后评估每个折叠的性能,您将得到每个折叠的有偏差的性能估计(这不好)。同样,如果您有数据驱动的超参数优化并使用来自某些折叠(或所有折叠)的数据,然后对这些相同折叠进行评估,您将再次获得有偏差的性能估计。可能的解决方案是:

  1. 分别在每个折叠内重复完整的管道(例如,在每个折叠内,进行特征选择+超参数优化和训练模型)。这样做意味着 k 折交叉验证可以让您对这个完整管道的性能进行无偏估计

  2. 将您的初始数据集拆分为“预处理数据集”和“训练/测试数据集”。您可以在“预处理数据集”上进行特征选择+超参数优化。然后,您修复您选择的特征和超参数,并在“训练/测试数据集”上进行 k 折交叉验证。这样做意味着在给定固定特征集和超参数值的情况下,k 折交叉验证可以让您对 ML 算法的性能进行无偏估计

请注意这两种解决方案如何导致对性能的估计略有不同。哪个更有趣取决于您的用例,取决于您计划如何在实践中部署机器学习解决方案。例如,如果您是一家打算让功能选择 + 超参数优化 + 训练每天/每周/每月/每年/任何时间自动运行的完整管道的公司,您也会对该完整管道的性能感兴趣管道,您将需要第一个解决方案。

另一方面,如果您一生中只能进行一次特征选择+超参数优化,然后只能定期重新训练您的算法(特征集和超参数值固定),那么性能只有那一步才是你感兴趣的,你应该选择第二个解决方案

没有人提到使超参数调整和特征选择相同的方法,所以我将讨论它。对于这种情况,您应该在一开始就设计您想要的所有功能并将它们全部包含在内。

现在统计界的研究试图将特征选择作为调整标准。基本上,你惩罚模型的方式是激励它只选择一些有助于它做出最佳预测的特征。但是您添加了一个调整参数来确定您应该承受多大的惩罚。

换句话说,您允许模型为您选择特征,并且您或多或少可以控制特征的数量。这实际上减少了计算,因为您不再需要决定哪些特征,而只需决定有多少特征,其余的由模型来完成。

因此,当您对参数进行交叉验证时,您实际上也在对特征选择进行交叉验证。

已经有许多 ML 模型以某种方式结合了这种特征选择。

  • 双正则化支持向量机,类似于普通 SVM,但具有特征选择
  • 处理线性回归的弹性网络
  • 神经网络中的 drop-out 正则化(这个没有参考)
  • 随机森林通常会随机处理特征的子集,因此可以为您处理特征选择

简而言之,人们试图同时将参数调整和特征选择结合起来,以降低复杂性并能够进行交叉验证

@DennisSoemers 有一个很好的解决方案。我将添加两个更明确的类似解决方案,它们基于特征工程和选择: Max Kuhn 和 Kjell Johnson的预测模型的实用方法。

Kuhn 使用该术语resample来描述fold数据集的 a,但 StackExchange 上的主要术语似乎是fold,因此我将在fold下面使用该术语。

选项 1 - 嵌套搜索

如果计算能力不是限制因素,则建议使用嵌套验证方法,其中有 3 级嵌套:

1)外部折叠,每个折叠具有不同的特征子集

2)内部折叠,每个折叠都有一个超参数搜索

3)每个超参数搜索的内部折叠,每个折叠都有不同的超参数集。

这是算法:

-> Split data into train and test sets.
-> For each external fold of train set:
    -> Select feature subset.
    -> Split into external train and test sets.

    -> For each internal fold of external train set:
        -> Split into internal train and test sets.
        -> Perform hyperparameter tuning on the internal train set. Note that this
           step is another level of nesting in which the internal train set is split
           into multiple folds and different hyperparameter sets are trained and tested on
           different folds.
    -> Examine the performance of the best hyperparameter tuned model 
       from each of the inner test folds. If performance is consistent, redo 
       the internal hyperparameter tuning step on the entire external train set.
    -> Test the model with the best hyperparameter set on the external test set.

-> Choose the feature set with the best external test score.
-> Retrain the model on all of the training data using the best feature set 
   and best hyperparameters for that feature set. 

在此处输入图像描述 图片来自第 11.2 章:简单过滤器

暗示该-> Select feature subset步骤是随机的,但还有其他技术,在本书第 11 章中进行了概述。

为了澄清这-> Perform hyperparameter tuning step一点,您可以阅读有关嵌套交叉验证的推荐方法这个想法是通过对数据的不同折叠重复执行训练和测试过程并查看测试结果的平均值来测试训练过程的稳健性。

选项 2 - 单独的超参数和特征选择搜索

-> Split data into hyperameter_train, feature_selection_train, and test sets.

-> Select a reasonable subset of features using expert knowledge.

-> Perform nested cross validation with the initial features and the 
   hyperparameter_train set to find the best hyperparameters as outlined in option 1.

-> Use the best hyperparameters and the feature_selection_train set to find 
   the best set of features. Again, this process could be nested cross 
   validation or not, depending on the computational cost that it would take 
   and the cost that is tolerable.

以下是 Kuhn 和 Johsnon 对这个过程的表述:

在将全局搜索方法与具有调整参数的模型相结合时,我们建议在可能的情况下,首先使用有关问题的专家知识来筛选特征集。接下来,重要的是确定合理的调整参数值范围。如果有足够数量的样本可用,则可以将其中的一部分拆分出来,并用于使用所有特征找到一系列潜在的良好参数值。调整参数值可能不是特征子集的完美选择,但它们对于找到最佳子集应该是相当有效的。

第 12.5 章:全局搜索方法

我认为你在那里想太多了。特征选择是特征工程的一部分,通常是有帮助的,但一些冗余特征在机器学习系统的早期阶段并没有太大的危害。所以最佳实践是首先生成所有有意义的特征,然后使用它们来选择算法和调整模型,在调整模型之后,你可以修剪特征集或决定使用新特征。

机器学习过程实际上是一个迭代过程,您在其中进行特征工程,然后尝试一些算法,然后调整模型并返回,直到您对结果满意为止。