前后模型选择:什么是起始模型?

机器算法验证 r 造型 特征选择 aic 向前向后
2022-04-05 14:56:21

我试图理解前后选择背后的逻辑(尽管我知道有更好的模型选择方法)。在正向模型选择中,选择过程从一个空模型开始,然后依次添加变量。在后向选择中,选择过程从完整模型开始,并依次排除变量。

问题:前向-后向选择从哪个模型开始?

是完整的模型吗?空模型?介于两者之间?维基百科Hastie 等人。(2009) - The Elements of Statistical Learning,第 60 页正在解释该方法,但我无法找到有关起始模型的任何信息。对于我的分析,我使用的stepAICRpackage的功能MASS

更新:

您可以在下面找到一个示例RstepAIC 功能会在控制台中自动打印选择过程的每个步骤,看起来选择是从完整模型开始的。但是,根据 jjet 的回答,我不确定我是否做错了什么。

# Example data
N <- 1000000
y <- rnorm(N)
x1 <- y + rnorm(N)
x2 <- y + rnorm(N)
x3 <- y + rnorm(N)
x4 <- rnorm(N)
x5 <- rnorm(N)
x6 <- rnorm(N)
data <- data.frame(y, x1, x2, x3, x4, x5, x6)

# Selection
library("MASS")
mod <- lm(y ~., data)
stepAIC(mod, direction = "both")
2个回答

我相信“向前-向后”选择是“向前-逐步”选择的另一个名称。这是 stepAIC 使用的默认方法。在此过程中,您从一个空模型开始,然后像前向选择一样按顺序构建。唯一需要注意的是,每次添加新变量后是否应该删除模型中已经存在的任何其他变量在这种方法中,您最终可以“非线性”地搜索所有不同的模型。XnewXnew

- - - - 编辑 - - - -

以下 R 代码说明了三种选择策略之间的区别:

# library(MASS)
set.seed(1)

N <- 200000
y <- rnorm(N)
x1 <- y + rnorm(N)
x2 <- y + rnorm(N)
x3 <- y + rnorm(N)
x4 <- rnorm(N)
x5 <- rnorm(N)
x6 <- x1 + x2 + x3 + rnorm(N)
data <- data.frame(y, x1, x2, x3, x4, x5, x6)

fit1 <- lm(y ~ ., data)
fit2 <- lm(y ~ 1, data)
stepAIC(fit1,direction="backward")
stepAIC(fit2,direction="forward",scope=list(upper=fit1,lower=fit2))
stepAIC(fit2,direction="both",scope=list(upper=fit1,lower=fit2))

我在这段代码中稍微修改了你的例子。首先,我设置了一个种子,以便您可以看到我使用的相同数据。我还使 N 更小,因此算法运行得更快一些。除了 x6,我将所有变量保持不变。x6 现在是最能预测 y 的个体——这将使它成为前向和前向逐步选择中选择的第一个变量。但是一旦 x1、x2 和 x3 进入模型,x6 就变得独立于 y 并且应该被排除在外。您会看到 forward-stepwise 正是这样做的。它从 x6 开始,继续包含 x1、x2 和 x3,然后返回并删除 x6 并终止。如果你只使用 forward,那么 x6 将留在模型中,因为算法永远不会回到这种多重共线性检查。

前向-后向模型选择是解决组合优化问题的两种贪心方法,即寻找特征的最佳组合(已知是 NP 完全的)。因此,您需要寻找次优、计算效率高的策略。例如,参见Pudil 等人的特征选择中的浮动搜索方法。人。

在 Forward 方法中,您从一个空模型开始,并迭代所有特征。对于您训练模型的每个特征,并根据您的指标选择产生最佳模型的特征。以类似的方式,您继续添加下一个与已选择的功能结合时产生最佳改进的功能。

在后向方法中,您只需反转过程:从所有特征开始,然后迭代地删除删除对性能影响最小或带来最大改进的那个。