较小的参数值如何帮助防止过度拟合?

How does having smaller values for parameters help in preventing over-fitting?

为了减少机器学习中线性回归的过拟合问题,建议通过包含参数的平方来修改成本函数。这导致参数值较小。

这对我来说一点都不直观。较小的参数值如何导致更简单的假设并有助于防止过度拟合?

将正方形添加到您的函数中(从线性到多项式)注意您可以绘制曲线而不是直线。

多项式函数示例:

y=q+t1*x1+t2*x2^2;

Adding this however can lead to a result which follows the test data too much with as result that new data is matched to close to the test data. Adding more and more polynomials (3rd, 4th orders). So when adding polynomials you always have to watch out that the data is not becoming overfitted.

要对此有更深入的了解,请在电子表格中绘制一些曲线,然后查看曲线如何随您的数据变化。

我整理了一个相当人为的例子,但希望它能有所帮助。

import pandas as pd
import numpy as np

from sklearn import datasets
from sklearn.linear_model import Ridge, Lasso
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import PolynomialFeatures

首先构建一个线性数据集,将训练和测试分开。每个5个

X,y, c = datasets.make_regression(10,1, noise=5, coef=True, shuffle=True, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X,y, train_size=5)

用无正则化的五阶多项式拟合数据。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
pipeline = Pipeline([
        ('poly',  PolynomialFeatures(5)),
        ('model', Ridge(alpha=0.))  # alpha=0 indicates 0 regularization.
    ])

pipeline.fit(X_train,y_train)

查看系数

pipeline.named_steps['model'].coef_
pipeline.named_steps['model'].intercept_

# y_pred = -12.82 + 33.59 x + 292.32 x^2 - 193.29 x^3 - 119.64 x^4 + 78.87 x^5

这里的模型接触了所有的训练点,但是系数很高,没有接触到测试点。

让我们再试一次,但是改变我们的 L2 正则化

pipeline.set_params(model__alpha=1)

y_pred = 6.88 + 26.13 x + 16.58 x^2 + 12.47 x^3 + 5.86 x^4 - 5.20 x^5

在这里我们看到了一个更平滑的形状,周围的摆动更少。它不再触及所有的训练点,而是一条平滑得多的曲线。由于添加了正则化,系数较小。

这有点复杂。这在很大程度上取决于您使用的算法。

做一个简单但有点笨的例子。而不是优化函数的参数

  y = a*x1 + b*x2 

你还可以优化

的参数
  y = 1/a * x1 + 1/b * x2 

显然,如果你在前一种情况下最小化,你需要在后一种情况下最大化它们。

大多数算法最小化参数平方的事实来自计算学习理论

让我们假设您要学习以下函数

 f(x) = a + bx + c * x^2 + d * x^3 +....

人们可以争辩说,只有 a 与零不同的函数 比函数 更有可能,其中 a 和 b 与零不同,依此类推。 按照 Occams razor(如果你有两个假设来解释你的数据,越简单的就越有可能是正确的),你应该更喜欢一个假设,其中更多的参数为零。

举个例子假设你的数据点是 (x,y) = {(-1,0),(1,0)} 您更喜欢哪个功能

f(x) = 0 

f(x) = -1 +  1*x^2

稍微扩展一下,您可以从零参数到小参数。

如果您想尝试一下,可以从线性函数中采样一些数据点并添加一点高斯噪声。如果你想找到一个完美的多项式拟合,你需要一个非常复杂的函数,通常具有非常大的权重。但是,如果您应用正则化,您将接近您的数据生成功能。

但如果您想在 rock-solid 理论基础上进行推理,我建议您应用 贝叶斯统计。那里的想法是您定义回归函数的概率分布。这样你就可以自己定义什么是 "probable" 回归函数。

(实际上 Tom Mitchell 的机器学习包含一个非常好的和更详细的解释)