注意
转到结尾 下载完整的示例代码。或通过JupyterLite或Binder在您的浏览器中运行此示例
普通最小二乘法和岭回归方差#
由于每个维度上的点数较少,并且线性回归使用直线尽可能地拟合这些点,因此观测值上的噪声会导致很大的方差,如第一个图所示。由于观测值中引入的噪声,每条线的斜率在每次预测中都可能变化很大。
岭回归基本上是最小化最小二乘函数的惩罚版本。惩罚项shrinks
回归系数的值。尽管每个维度的数据点很少,但与标准线性回归相比,预测的斜率更加稳定,并且线本身的方差大大降低。
# Authors: The scikit-learn developers
# SPDX-License-Identifier: 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.304秒)
相关示例
绘制岭系数作为正则化的函数
在具有强异常值的数据集上,HuberRegressor 与 Ridge 的比较
在具有强异常值的数据集上,HuberRegressor 与 Ridge 的比较
逻辑函数
非负最小二乘法