(为什么)过度拟合的模型往往具有较大的系数?

机器算法验证 回归 方差 线性模型 偏见 正则化
2022-01-21 18:02:57

我想变量的系数越大,模型在该维度上“摆动”的能力就越大,从而提供了更多拟合噪声的机会。虽然我认为我对模型中的方差和大系数之间的关系有一个合理的认识,但我对它们为什么会出现在过拟合模型中没有那么好的认识。说它们是过度拟合的症状是不正确的,而系数收缩更像是一种减少模型方差的技术?通过系数收缩进行正则化似乎是根据大系数是过度拟合模型的结果这一原则运作的,但也许我误解了该技术背后的动机。

我认为大系数通常是过度拟合的症状的直觉来自以下示例:

假设我们想要拟合全部位于 x 轴上的我们可以很容易地构造一个多项式,其解是这些点:假设我们的点在该技术给出所有系数 >= 10(一个系数除外)。随着我们添加更多点(从而增加多项式的次数),这些系数的大小将迅速增加。nf(x)=(xx1)(xx2)....(xxn1)(xxn)x=1,2,3,4

这个例子是我目前如何将模型系数的大小与生成的模型的“复杂性”联系起来,但我担心这种情况是无菌的,无法真正表明现实世界的行为。我特意构建了一个过拟合模型(对二次采样模型生成的数据进行 10 次多项式 OLS 拟合),惊讶地发现我的模型中的系数大多很小:

set.seed(123)
xv = seq(-5,15,length.out=1e4)
x=sample(xv,20)
gen=function(v){v^2 + 7*rnorm(length(v))}
y=gen(x)
df = data.frame(x,y)

model = lm(y~poly(x,10,raw=T), data=df)
summary(abs(model$coefficients))
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# 0.000001 0.003666 0.172400 1.469000 1.776000 5.957000


data.frame(sort(abs(model$coefficients)))
#                                   model.coefficients
# poly(x, 10, raw = T)10                  7.118668e-07
# poly(x, 10, raw = T)9                   3.816941e-05
# poly(x, 10, raw = T)8                   7.675023e-04
# poly(x, 10, raw = T)7                   6.565424e-03
# poly(x, 10, raw = T)6                   1.070573e-02
# poly(x, 10, raw = T)5                   1.723969e-01
# poly(x, 10, raw = T)3                   6.341401e-01
# poly(x, 10, raw = T)4                   8.007111e-01
# poly(x, 10, raw = T)1                   2.751109e+00
# poly(x, 10, raw = T)2                   5.830923e+00
# (Intercept)                             5.956870e+00

也许从这个例子中得出的结论是,三分之二的系数小于 1,并且相对于其他系数,有三个系数异常大(并且与这些系数相关的变量也恰好是那些最接近与真实抽样模型有关)。

(L2) 正则化只是一种减少模型方差从而“平滑”曲线以更好地拟合未来数据的机制,还是利用从过度拟合模型倾向于表现出大系数的观察得出的启发式?过度拟合的模型往往表现出较大的系数,这是一个准确的说法吗?如果是这样,任何人都可以稍微解释一下这种现象背后的机制和/或指导我阅读一些文献吗?

4个回答

在正则化上下文中,“大”系数意味着估计的大小比使用固定模型规范时的大小要大。这是从数据中获得估计值和模型规范的影响。

考虑一下像逐步回归这样的过程将对给定变量做什么。如果其系数的估计值相对于标准误差较小,它将从模型中删除。这可能是因为真实值确实很小,或者仅仅是因为随机误差(或两者的组合)。如果它被丢弃,那么我们将不再关注它。另一方面,如果估计值相对于其标准误差较大,它将被保留。注意不平衡:当系数估计值小时,我们的最终模型将拒绝一个变量,但当估计值很大时,我们将保留它。因此,我们很可能高估了它的价值。

换句话说,过度拟合意味着你夸大了一组给定的预测变量对响应的影响。但是,您可以夸大影响的唯一方法是估计系数太大(相反,排除的预测变量的估计值太小)。

你应该做的是在你的实验中加入一个变量选择过程,例如逐步回归step然后在不同的随机样本上多次重复你的实验,并保存估计值。你应该发现,与不使用变量选择相比,系数的所有估计都系统性地太大了。正则化程序旨在解决或缓解此问题。β3β10

这是我正在谈论的一个例子。

repeat.exp <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(step(lm(y ~ x1, data=d), y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10, trace=0))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z <- repeat.exp(M=1000)

# some time later...
rowMeans(abs(z), na.rm=TRUE)

(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    3.162100    6.533642    3.108974    3.204341    3.131208    3.118276    3.217231    3.293691    3.149520    3.073062 

将此与您不使用变量选择时发生的情况进行对比,而只是盲目地适合所有内容。的估计仍然存在一些误差,但平均偏差要小得多。β3β10

repeat.exp.base <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(lm(y ~ ., data=d))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z2 <- repeat.exp.base(M=1000)

rowMeans(abs(z2))
(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    1.676066    6.400629    1.589061    1.648441    1.584861    1.611819    1.607720    1.656267    1.583362    1.556168 

此外,L1 和 L2 正则化都隐含假设您的所有变量以及系数都采用相同的测量单位,即\beta_1的单位变化等同于单位变化。因此,在应用这些技术中的任何一种之前标准化变量的通常步骤。β1β2

一个非常简单的答案,无需查看您的详细信息:当您过度拟合时,参数估计器往往会获得较大的方差,而在较大的方差下,大值正是您所期望的!

大卫。我认为你的例子的问题是你没有标准化你的数据(即 X^10>> X.

所以大卫是对的,它更多地缩小了更大的系数(所以你最终可以得到很多小系数,而 L1 正则化可能会给你一个大的而其余的为零)

所以基本上它封装了小的变化应该有小的影响(当然,我们回到了有多小的问题 - 规范化你的数据等)。但关键是在更高维度中,相关性开始发挥作用:假设您有两个高度相关的变量 x,y(均归一化为方差 1),那么它们的差异将很小 =“噪声” - 因此会惩罚大权重防止您适应这种噪声(并且使 y 和 x 的几乎抵消系数变得非常大)。

该示例仍然适用于任何线性关系 (y=mx)

查找岭回归

过拟合演示

这张图片来自我对 Andrew Ng 的 DL 课程的笔记,如果您有任何问题,请告诉我