线性回归与岭回归方差比较

数据分析中,经常会遇到数据点较少的情况,尤其是在高维空间中。在这种情况下,使用线性回归模型时,由于观测数据中的噪声,会导致模型预测的方差非常大。这是因为线性回归试图通过一条直线来拟合这些点,而噪声的存在使得每次预测的斜率都可能有很大的变化。

与普通最小二乘法(Ordinary Least Squares, OLS)相比,岭回归(Ridge Regression)通过最小化一个带有惩罚项的最小二乘函数来解决这个问题。这种惩罚项会缩小回归系数的值,从而减少模型预测的方差。即使在每个维度中数据点很少的情况下,岭回归预测的斜率也更加稳定,与标准线性回归相比,其预测线的方差大大降低。

以下是一个使用Python的scikit-learn库来比较线性回归岭回归方差的示例代码。首先,导入必要的库,并创建训练和测试数据集。然后,定义了两种回归模型:一个是普通最小二乘回归,另一个是岭回归。接着,对每个模型进行训练,并在测试数据集上进行预测,最后绘制出预测结果。

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()

从上面的代码中可以看出,首先导入了matplotlib.pyplot用于绘图,numpy用于数据处理,以及scikit-learn库中的linear_model模块用于创建回归模型。然后,创建了训练和测试数据集,并设置了随机种子以保证结果的可重复性。接着,定义了两种回归模型:普通最小二乘回归和岭回归。在循环中,对每个模型进行了多次训练和预测,并在测试数据集上绘制了预测结果。最后,设置了图表的标题、坐标轴范围和标签,并显示了图表。

通过比较两种回归模型的预测结果,可以清楚地看到,在数据点较少的情况下,岭回归模型的预测方差明显小于普通最小二乘回归模型。这表明,在处理高维数据或数据点较少的情况时,岭回归是一种更加稳健的回归方法。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485