普通最小二乘法和岭回归方差#
由于每个维度上的点数很少,并且线性回归使用直线尽可能地拟合这些点,因此观测值上的噪声会导致较大的方差,如第一个图所示。由于观测值中引入的噪声,每条线的斜率对于每个预测都可能会有很大差异。
岭回归基本上是最小化最小二乘函数的惩罚版本。惩罚项缩小
了回归系数的值。尽管每个维度上的数据点很少,但与标准线性回归相比,预测的斜率要稳定得多,并且线本身的方差也大大降低。
# 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 秒)
相关示例