普通最小二乘法和岭回归方差#

由于每个维度上的点数很少,并且线性回归使用直线尽可能地拟合这些点,因此观测值上的噪声会导致较大的方差,如第一个图所示。由于观测值中引入的噪声,每条线的斜率对于每个预测都可能会有很大差异。

岭回归基本上是最小化最小二乘函数的惩罚版本。惩罚项缩小了回归系数的值。尽管每个维度上的数据点很少,但与标准线性回归相比,预测的斜率要稳定得多,并且线本身的方差也大大降低。

  • ols
  • ridge
# Code source: Gaël Varoquaux
# Modified for documentation by Jaques Grobler
# License: BSD 3 clause


import matplotlib.pyplot as plt
import numpy as np

from sklearn import linear_model

X_train = np.c_[0.5, 1].T
y_train = [0.5, 1]
X_test = np.c_[0, 2].T

np.random.seed(0)

classifiers = dict(
    ols=linear_model.LinearRegression(), ridge=linear_model.Ridge(alpha=0.1)
)

for name, clf in classifiers.items():
    fig, ax = plt.subplots(figsize=(4, 3))

    for _ in range(6):
        this_X = 0.1 * np.random.normal(size=(2, 1)) + X_train
        clf.fit(this_X, y_train)

        ax.plot(X_test, clf.predict(X_test), color="gray")
        ax.scatter(this_X, y_train, s=3, c="gray", marker="o", zorder=10)

    clf.fit(X_train, y_train)
    ax.plot(X_test, clf.predict(X_test), linewidth=2, color="blue")
    ax.scatter(X_train, y_train, s=30, c="red", marker="+", zorder=10)

    ax.set_title(name)
    ax.set_xlim(0, 2)
    ax.set_ylim((0, 1.6))
    ax.set_xlabel("X")
    ax.set_ylabel("y")

    fig.tight_layout()

plt.show()

脚本总运行时间:(0 分钟 0.315 秒)

相关示例

绘制岭系数作为正则化函数

绘制岭系数作为正则化函数

具有强异常值的数据集上的 HuberRegressor 与 Ridge

具有强异常值的数据集上的 HuberRegressor 与 Ridge

逻辑函数

逻辑函数

线性回归示例

线性回归示例

由 Sphinx-Gallery 生成的图库