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


33

我认为变量的系数越大,模型在该维度上“摆动”的能力就越强,从而增加了拟合噪声的机会。尽管我认为我对模型中的方差与大系数之间的关系有一个合理的认识,但是我对为什么它们出现在过拟合模型中却没有很好的认识。说它们是过度拟合的症状是不正确的,系数收缩更是一种减少模型方差的技术吗?通过系数收缩进行正则化的原理似乎是:大系数是过度拟合模型的结果,但也许我误解了该技术背后的动机。

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

假设我们要拟合全部位于x轴上的个点。我们可以很容易地构造一个多项式,其解为这些点:。假设我们的点位于。该技术给出所有大于等于10的系数(一个系数除外)。随着我们添加更多点(从而增加多项式的次数),这些系数的大小将迅速增加。f x = x x 1x x 2X - X ñ - 1X - X ÑX = 1 2 3 4ñFX=X-X1个X-X2X-Xñ-1个X-XñX=1个234

这个示例是我当前如何将模型系数的大小与生成的模型的“复杂性”联系起来的方式,但是我担心这种情况对于实际显示行为是不正确的。我特意建立了一个过拟合模型(对二次抽样模型生成的数据进行了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
您所说的“大”系数到底是什么意思?毕竟,如果仅更改表达因变量的单位(例如,从秒差距到飞秒),我们就可以使系数的值任意大或小。
ub

1
我对此没有很好的答案。我的理解是,攻击“大”系数是L2正规化背后的一种启发式启发。但是综合增加系数的幅值还需要更改正则化常数以补偿当前模型中的不同幅值,不是吗?我认为这里的“大”这个概念并不像您看起来的那样模棱两可,即使我无法很好地描述它。
David Marx

@DavidMarx:我不认为L2正则化遵循“大”系数,对吗?相反,它倾向于将可能不大的系数推到零,从某种意义上说,这迫使您选择而不是在两者之间寻求折衷。
韦恩

@wayne啊,我想我倒向了。我以为它会缩小较大的系数或按比例缩小所有系数。如果L2正则化将具有较小系数的变量推出模型,那将更有意义。
大卫·马克思

1
经过8次编辑后,我想我的答案了。嘘。
Hong Ooi 2013年

Answers:


15

在正则化上下文中,“大”系数表示估算的幅度大于使用固定模型规格时的估算幅度。这不仅是从数据中获得估计值,而且是获得模型规格的影响。

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

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

您应该做的是在实验中加入变量选择程序,例如通过逐步回归step。然后在不同的随机样本上重复您的实验多次,并保存估算值。你会发现,这些系数的所有估计β 10是系统过大,与不使用变量选择的时候。正则化程序旨在解决或缓解此问题。β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 

β1个β2


修改后的示例让我有些困惑。您说“与不使用变量选择相比,您应该发现系数β3至β10的系统估计值都过大”,但看起来您的第一个实验(使用step)比第二个实验获得的值更大(“盲目”拟合值)。这是否与您建议的情况相反?
大卫·马克思

另外,您和其他人在这里建议我应该在示例中标准化变量。我知道了原因,但是我不知道这样做的好方法。我是否应该增强样本数据以包括X的每个幂的列并标准化这些值?还是有一种方法可以直接在我调用的模型公式中标准化变量poly(我猜不是)?
大卫·马克思

?与不使用逐步方式相比,使用逐步方式会获得更大的绝对偏差。不知道你在问什么。至于标准化:如果您按照我的说明进行操作,那就没有必要了,即在逐步方法和非逐步方法之间进行比较。每个变量正在从一种处理方法与另一种方法进行比较,而不是与其他变量进行比较。
Hong Ooi 2013年

6

一个非常简单的答案,而无需考虑您的详细信息:当您过度拟合时,参数估计量往往会产生较大的方差,而对于较大的方差,则恰恰是您期望的值!


如果我正确理解您的观点,这将解释为什么模型会预测“大”值,而不是为什么模型会由“大”系数组成。
大卫·马克思

不,那是错的!至少某些个体系数估计量将具有较大的方差,因此这些系数的估计值将趋于较大。(就我们而言,即使过度拟合,某些系数也可能是稳定的,但并非全部)。另外,为了保持预测的无偏性,独立系数估计量之间往往会有一些较大的负协方差。
kjetil b halvorsen

1
但是,这并不能完全回答问题。如果只是一个大差异的问题,那么您得到的估计数与大的估计数一样多(非正式地讲)。问题在于,我们然后假设小的估计(相对于其std误差)“不重要”,并从模型中删除这些变量。结果,剩下的唯一估计将是大估计。
Hong Ooi 2013年

0

大卫。我认为您的示例存在的问题是您尚未规范化数据(即X ^ 10 >>X。

大卫是对的,它会缩小更大的系数(因此您可能会得到很多小的系数,而L1正则化可能会给您一个大的系数,而剩下的为零)

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

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

查找山脊回归


1
大卫,为什么不重做将所有变量x,x ^ 2,...,x ^ n归一化为零均值和标准差1的示例,然后查看结果呢...输入变量较大时系数也较小
seanv507

0

过度拟合的演示

此图片来自我对吴安德的DL课程的笔记,请让我知道您是否有疑问


1
您能否解释为什么您认为有关神经网络正则化的注释回答了有关系数大小和过度拟合的问题?
ub

所有这3个因素都联系在一起,过度拟合正是正则化试图防止的问题,并且由于上述原因,它通过惩罚高系数来进行尝试
Pradi KL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.