如何在机器学习管道中对特征选择和超参数优化进行排序?


14

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

但是我陷入了困境。在ii)和iii)中,存在用于ReliefF的k-最近的Neigbours或窗口长度的超参数,对其进行评估的传感器信号,或NN的每一层中的隐藏单位数

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

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


我认为去耦特征选择调整和分类器调整是有效的,因为对reliefF的启发式目标旨在最大化类间方差并最小化类内方差,这也表明一个好的分类器。因此,调整浮雕F的最佳参数也使“好的”分类器更“可能”。但是,采用数学公式来支持此想法将非常好。
Grunwalski'3

此问题的一个特定变体:特征选择是否应作为交叉验证例程的一部分(例如:#对于每个分类器超参数集:#对于每个k倍CV游程:1)特征选择,2)特征缩放,3)分类器拟合4)根据测试集进行预测?
尼古拉斯·里布尔

1
@NikolasRieble我刚刚写了一个原始问题的答案,并且还在答案中包括了您的问题
Dennis Soemers

Answers:


14

就像您已经观察到的一样,对功能的选择(功能选择)可能会影响算法的最佳超参数,对算法选择的超参数可能会对最佳的功能选择产生影响。

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

实际上,这实际上可能并不可行。通常,如果您无法负担所有可能的组合的评估费用,我建议:

  1. 非常宽松地优化超参数,只是为了确保您没有为某些超参数分配非常差的值。如果您对超参数有一个很好的直观了解,通常可以通过手工完成,也可以使用非常简单的超参数优化过程(仅使用一堆您认为相当不错的功能)来完成。

  2. 特征选择,其超参数可能未进行100%优化,但至少也并非十分糟糕。如果您已经至少配置了某种程度不错的机器学习算法,那么与微优化超参数相比,拥有良好的功能对您的性能将更为重要。极端示例:如果没有功能,则无法预测任何事情。如果您具有包含类标签的作弊功能,则可以对所有内容进行完美分类。

  3. 使用上一步中选择的功能优化超参数。现在这应该是一个很好的功能集,实际上可能值得对超参数进行一些优化。


为了解决Nikolas在评论中发布的另一个问题,让所有这些事情(功能选择,超参数优化)与k折交叉验证相互作用:我会说这取决于。

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

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

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

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

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


您还能提供参考吗?
Nikolas Rieble,

1
这篇文章中有一些著名书籍的图片:nodalpoint.com/not-perform-feature-selection。那些似乎同意我的“可能的解决方案1”。除了...我自己以外,我没有必要为其他情况提供参考。我确实在那里提供了我的推理/动机,据我看来,这是参考资料:D
Dennis Soemers,

1
对于任何预测建模人员,ESL的这一章应为100%必读。
马修·德鲁里

因此,关于soln 1,如何在多次cv中运行特征选择(fs)和超参数优化(ho)之后如何获得最终的特征集和模型超参数?同样,当我们在cv的迭代中执行这些操作时,是否要先运行fs,然后再使用这些功能?
sma

1
@skim CV通常仅用于获得良好的性能估计。通常,您不会直接开始使用以折中的一组训练的任何模型。如果您发现通过CV估算的性能令人满意,则可以在完整的训练数据集上再次运行完整的管道(再次包括功能选择和超参数调整)。从中获得的功能集+超参数+模型就是您要“投入生产”的内容ķ-1个
Dennis Soemers

4

没有人提及使超参数调整和功能选择相同的方法,因此我将在此进行讨论。对于这种情况,您应该在开始时就设计所有想要的功能并将其包括在内。

现在,统计界的研究已尝试使特征选择成为调整标准。基本上,您以一种激励模型的方式对模型进行惩罚,以鼓励模型只选择一些有助于做出最佳预测的功能。但是,您添加了一个调整参数来确定应承担的罚款额。

换句话说,您允许模型为您选择要素,而您或多或少都可以控制要素的数量。实际上,这减少了计算量,因为您不必再​​决定哪些功能,而只需决定多少功能和其余的模型。

因此,当您对参数进行交叉验证时,您也将有效地对特征选择进行交叉验证。

已经有很多ML模型以某种方式结合了此功能选择。

  • 双正则化支持向量机,类似于普通的SVM,但具有功能选择
  • 弹性网处理线性回归
  • 神经网络中的辍学正则化(对此没有参考)
  • 随机森林通常会随机处理要素的子集,因此可以为您处理要素选择

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


0

我认为您对此有很多思考。作为功​​能工程的一部分的功能选择通常是有帮助的,但是某些冗余功能在机器学习系统的早期并没有太大危害。因此,最佳实践是先生成所有有意义的特征,然后使用它们选择算法并调整模型,在调整模型后,您可以修剪特征集或决定使用新特征。

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


您的意思是它正在尝试直到工作
为止

尝试ML程序,而不是随机进行。实际上,ML实际上本身就是一点黑客。
THN
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.