仅使用例如 250 个样本和最多 10 个特征的小数据集对 1 个数值变量进行简单回归的“最佳”模型是什么?
我知道数据集非常小(如果应用例如 60%/40% 的训练测试拆分,则数据集会更小),并且这会带来很高的过度拟合风险,尤其是在使用神经网络等复杂模型时。
在这种情况下使用什么模型是合理的,避免过度拟合的最佳方法是什么?请注意,我不知道关系是否是线性的,或者是否所有功能都必然有用。
仅使用例如 250 个样本和最多 10 个特征的小数据集对 1 个数值变量进行简单回归的“最佳”模型是什么?
我知道数据集非常小(如果应用例如 60%/40% 的训练测试拆分,则数据集会更小),并且这会带来很高的过度拟合风险,尤其是在使用神经网络等复杂模型时。
在这种情况下使用什么模型是合理的,避免过度拟合的最佳方法是什么?请注意,我不知道关系是否是线性的,或者是否所有功能都必然有用。
小数据集和少量特征是传统统计模型往往做得很好的领域,因为它们提供了实际解释特征重要性的能力。
我假设“简单回归”是指从输入变量中预测一个实值的连续变量 y 。您提到您怀疑您可能存在非线性关系,并且您对功能的重要性了解不多。
在这种情况下,我的直觉是使用广义加法模型(GAM),例如 R 的 mgcv 包。mgcv 具有非常好的默认方法,可以在 GAM 中选择一些更神秘的参数,例如有多少个结以及放在哪里他们。
也许您有三个预测变量,x1、x2 和 x3,其中 x1 和 x2 是连续的,x3 是分类变量。在这种情况下,您可以(在 R 中):
library(mgcv)
x3 <- as.factor(x3)
my.model <- gam(y ~ s(x1) + s(x2) + x3, method = "REML")
summary(my.model)
plot(my.model, shade=TRUE, pages=1)
关于使用 REML 的最后一部分是个人喜好。它设置了非线性曲线允许的“摆动”程度。如果我记得的话,默认方法使用广义交叉验证,虽然根据我的经验,它工作得很好,但往往会给出“摇摆不定”的曲线。
仅 250 天的每日数据的问题在于,您可能会面临季节性问题,而这些问题仅凭业务知识就无法真正进行统计评估。
但无论季节性如何,我认为 250 个样本和 10 个特征都足够安静,可以构建预测模型。
最好的方法是使用增强回归(参见 xgboost,现在做得很好,非常流行且易于理解)和像这样的一个很好的验证过程,我现在在小型数据集上使用了很多:http:// dataneel.github.io/nx2_cross_validation/
我不喜欢仅对 10 个特征进行正则化,实际上没有必要,您可以通过相关性的基础分析来研究每个变量对目标的影响,用您的 y 绘制每个 x 以查看形状关系,……
如果您正在考虑线性模型,并且担心过度拟合,则可以考虑使用带正则化的线性回归,即。岭回归或套索或组合(“弹性网”)。
如果您想尝试非线性项和交互项,可以尝试使用多项式内核或 RBF 内核进行 SVM 回归。
这仍然需要您将数据划分为训练调整测试部分,但是,您可以对“训练调整”部分使用 k 折交叉验证(以权衡缺乏数据以进行额外计算)。您可以保留 25% 用于测试。
如果您担心过度拟合,则很难避免测试样本 - 这是因为除非您在看不见的样本上测试拟合模型,否则您无法获得模型性能的无偏估计。
有了这么小的数据集,我会考虑几个选项:
如果不了解数据集和模型的操作目标,很难准确地说出什么是最好的。通常,如果你希望在现实世界中很好地概括,你最好花精力改进你的数据源而不是你的模型