我有一个包含 87 个样本和 9480 个变量的训练集。我的预测变量是连续的,我的响应变量是二元的。我想使用 R 中的 caret 包来调整我的数据的神经网络分类模型。为了做到这一点,我首先必须通过特征选择来减小预测集的大小,使其在计算上可行,对吗?
让我们假设这是正确的。那么问题就变成了“哪种特征选择方法?”。例如,如果我要使用插入符号中的 rfe 函数进行 RF-RFE,我将获得一个特定于随机森林的最佳特征集,而不一定是神经网络的最佳特征集。
有什么建议吗?
我有一个包含 87 个样本和 9480 个变量的训练集。我的预测变量是连续的,我的响应变量是二元的。我想使用 R 中的 caret 包来调整我的数据的神经网络分类模型。为了做到这一点,我首先必须通过特征选择来减小预测集的大小,使其在计算上可行,对吗?
让我们假设这是正确的。那么问题就变成了“哪种特征选择方法?”。例如,如果我要使用插入符号中的 rfe 函数进行 RF-RFE,我将获得一个特定于随机森林的最佳特征集,而不一定是神经网络的最佳特征集。
有什么建议吗?
考虑构建预测模型(例如神经网络)过程的一种方法是,您有一个信息“预算”可以花费,就像每月家庭预算的一定金额一样。你的训练集中只有 87 个观察值(测试集中只有 36 个),你的预算非常少。此外,与连续变量相比,二元指标(即,您的预测变量是正数还是负数)中的信息要少得多。事实上,您可能只有足够的信息来可靠地估计正比例。
神经网络有很多优点,但它们需要估计大量的参数。当您有一个隐藏层(或多个隐藏层)和多个输入变量时,需要准确估计的参数(链接权重)的数量会激增。但是要估计的每个参数都会消耗您的一些信息预算。您基本上可以保证过度拟合此模型(请注意,这与算法的计算可行性无关)。不幸的是,我认为交叉验证不会让你摆脱这些问题。
如果您致力于使用连续变量构建预测模型,我会尝试使用逻辑回归模型而不是 NN。它将使用更少的参数。我会用可能只有一个变量或最多两个变量来拟合模型,并使用测试集来查看其他变量(仅超出截距)是否会产生不稳定性并降低样本外的准确性。
关于 X 变量本身,我会使用一种对结果视而不见的方法。具体来说,我会尝试主成分分析 (PCA) 并仅提取前一或两台 PC。老实说,我认为这将是你能做到的最好的。
关于您的第一个问题,这取决于您的计算机。
关于第二个,没有单一的最佳答案。神经网络本身经常用于特征选择。这是导致深度学习的范式。在这种情况下,您不太可能想要进行任何特征选择(可能对数据进行白化除外)。
如果您通过反向传播拟合浅层网络并且担心过度拟合,那么执行(无原则但通常有效的)PCA 并丢弃不太重要的组件可能会对您有所帮助。