machine-learning - 较小的参数值如何有助于防止过度拟合?

标签 machine-learning linear-regression

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

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

最佳答案

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

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)

Original Data

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

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

No Regularization

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

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

pipeline.set_params(model__alpha=1)

With regularization

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

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

关于machine-learning - 较小的参数值如何有助于防止过度拟合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569903/

相关文章:

python - 自定义模型移至 scikit-learn

machine-learning - Keras NoteBook GPU 超时

python - 等权共享对角协方差的GMM聚类算法

r - 线性回归系数信息作为数据框或矩阵

python - 在 StatsModels 中返回样本外预测的标准和置信区间

r - 如何使用像素矩阵将多个图像定位在同一个绘图上

android - Android 上的 tensorflow 错误

r - 如何从lm结果中获取RMSE?

r - 在 R 的 lm() 中输入多个解释变量有捷径吗?

c - 在 C 中使用 dgsev 时获取不正确的值