为了减少机器学习中线性回归的过拟合问题,建议通过包含参数的平方来修改成本函数。这导致参数值更小。
这对我来说一点也不直观。较小的参数值如何导致更简单的假设并有助于防止过度拟合?
最佳答案
我整理了一个相当人为的示例,但希望它有所帮助。
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
在这里,我们看到形状更平滑,摆动更少。它不再触及所有训练点,但它是一条平滑得多的曲线。由于加入了正则化,系数更小。
关于machine-learning - 较小的参数值如何有助于防止过度拟合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569903/