我想变量的系数越大,模型在该维度上“摆动”的能力就越大,从而提供了更多拟合噪声的机会。虽然我认为我对模型中的方差和大系数之间的关系有一个合理的认识,但我对它们为什么会出现在过拟合模型中没有那么好的认识。说它们是过度拟合的症状是不正确的,而系数收缩更像是一种减少模型方差的技术?通过系数收缩进行正则化似乎是根据大系数是过度拟合模型的结果这一原则运作的,但也许我误解了该技术背后的动机。
我认为大系数通常是过度拟合的症状的直觉来自以下示例:
假设我们想要拟合全部位于 x 轴上的我们可以很容易地构造一个多项式,其解是这些点:。假设我们的点在。该技术给出所有系数 >= 10(一个系数除外)。随着我们添加更多点(从而增加多项式的次数),这些系数的大小将迅速增加。
这个例子是我目前如何将模型系数的大小与生成的模型的“复杂性”联系起来,但我担心这种情况是无菌的,无法真正表明现实世界的行为。我特意构建了一个过拟合模型(对二次采样模型生成的数据进行 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) 正则化只是一种减少模型方差从而“平滑”曲线以更好地拟合未来数据的机制,还是利用从过度拟合模型倾向于表现出大系数的观察得出的启发式?过度拟合的模型往往表现出较大的系数,这是一个准确的说法吗?如果是这样,任何人都可以稍微解释一下这种现象背后的机制和/或指导我阅读一些文献吗?