可以对训练数据的子集执行特征选择吗?

数据挖掘 机器学习 特征选择 随机森林 交叉验证
2021-10-06 06:34:03

我有一个包含近一百万行的训练数据集,最初我正在考虑八个特征。我的机器学习模型将是随机森林回归器。
“特征工程和选择:预测模型的实用方法”的第3.4.7节中,有这样的内容:

最后,对于大量数据,替代数据使用方案可能是一个好主意。可以为特定目的创建多个拆分,而不是简单的训练/测试拆分。例如,在使用训练集构建模型之前,可以使用数据的特定拆分来确定模型的相关预测变量。这将减少在重采样中包含昂贵的特征选择步骤的需要。

基于此,为了找到相关特征,我想对 10% 的训练数据(约 100k 行)的初始特征集的所有可能子集进行详尽的搜索。每个子集的评估将通过对所有子集具有相同超参数的 5 倍交叉验证随机森林来完成。

为什么是 10%?回答:减少计算时间,因为我认为 100k 行会给我一组可靠的功能。我没有参考来支持我的选择。如果你有的话,请告诉我。

在找到最佳子集后,我继续使用 100% 的训练数据进行超参数调整。

难道我做错了什么?你能建议我一些参考资料来寻找我做错的部分吗?

我搜索了 Max Kuhn 谈到的这个“特定分裂”,找不到任何类似的建议。

更多细节:

如果我只有八个特征,为什么要进行特征选择,特别是考虑到 RF 对冗余/不相关特征有些不敏感(关于预测性能,而不是特征重要性/选择)?

除了通过使用较少的特征来减少计算时间的一般想法之外,特征是气象变量,可能无法在任何地方轻松获得/访问。因此,如果我要构建一个可用于其他案例研究和研究的模型,如果它的变量较少,它会更容易使用。

我认为在另一种方法中使用 RF 进行特征选择更有用,因为它还可以隐式考虑交互效果。

我想在学术工作中做所有这些事情,这就是为什么我需要证明我所做的所有步骤和决定的合理性。在这里,我最关心的是我只使用了 100k 行进行特征选择。有人可能会说,为什么是 100k?为什么不是200k?等等。

我的另一个疑问是:既然我做了有监督的特征选择,我应该对剩余的 90% 的训练数据进行调整,而不是 100%。你同意?

1个回答

在找到最佳子集之后没有意义。您的方法以这种方式不正确。

如果您无法处理所有数据,则可能必须遵循以下方法之一:

1- 执行集群并从每个集群中选择 10%(越多越好,取决于您的计算机可以处理的情况),因此所有 10 个子集可能具有相似的分布。因此,这些模型理论上应该具有相似的性能。如果您可以在数据中找到集群,则此方法很有用。不要忘记将每个子集拆分为训练/测试子集!

2- 如果没有找到集群,为每个子集开发 10 个模型,并使用输出的平均值(装袋),看看它是如何工作的。

超参数调优是一项昂贵的任务,即使对于小型数据集也是如此;所以使用不是 100% 而是 70-80%的数据作为训练集可能不是一个好主意。

您应该考虑的另一件事是您选择的 ML 算法。随机森林可能是也可能不是一个好的选择。因此,在小的子集上尝试不同的算法,以了解哪种算法可能更适合您的问题。然后考虑超参数调整和特征选择。