回归分析全家桶下面介绍如何使用各种回归模型的示例代码主要分为以下一些步骤模拟数据创建适合某种回归模型的测试数据创建回归模型并训练主要使用scikit-learn这个库评估模型有时会和其他回归模型对比可视化模型使用matplotlib这个库简单展示模型效果由于担心文章篇幅太长文中的示例没有贴出完整的代码特别是可视化部分的代码比较繁琐文中都省略了文章末尾提供了完整代码一个jupyter notebook文件的下载地址包括了所有可视化的代码。下面的代码中统一导入了下面的库import pandas as pd import numpy as np import matplotlib import matplotlib.pyplot as plt # 为了显示中文 matplotlib.rcParams[font.sans-serif] [Microsoft YaHei Mono] matplotlib.rcParams[axes.unicode_minus] False1.1. 线性回归 (Linear Regression)一句话概念最基础的回归假设自变量X和因变量Y之间是“直来直去”的线性关系。使用场景预测房价、销售额等连续数值且数据没有明显的复杂非线性关系。线性回归模型使用示例# 线性回归 (Linear Regression) from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score # 构造测试数据 # 假设我们要模拟房屋面积自变量X和房价因变量Y的关系 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成100个房屋面积数据范围在50-200平方米 X np.random.rand(100, 1) * 150 50 # 真实的线性关系房价 5000 * 面积 100000 随机噪声 # 其中5000是每平方米的价格100000是基础价格 # 加入一些随机噪声使数据更真实 Y_true 5000 * X 100000 Y Y_true np.random.randn(100, 1) * 50000 # 加入标准差为50000的噪声 # 使用线性回归模型 model LinearRegression() model.fit(X, Y) # 预测 Y_pred model.predict(X) # 打印模型参数 print(线性回归模型参数) print(f截距基础价格: {model.intercept_[0]:.2f}) print(f斜率每平方米价格: {model.coef_[0][0]:.2f}) # 评估模型 mse mean_squared_error(Y, Y_pred) r2 r2_score(Y, Y_pred) print(f\n模型评估) print(f均方误差 (MSE): {mse:.2f}) print(f决定系数 (R²): {r2:.2f}) # 使用matplotlib绘制图像 #... 省略 ... ## 运行结果 线性回归模型参数 截距基础价格: 118417.69 斜率每平方米价格: 4846.74 模型评估 均方误差 (MSE): 2016461409.92 决定系数 (R²): 0.96 1.2. 多项式回归 (Polynomial Regression)一句话概念当数据不是直线分布而是像曲线一样弯曲时我们给自变量加上平方、立方等“高次项”来拟合曲线。使用场景拟合生物生长曲线、由于边际效应递减导致的经济学数据等非线性关系。多项式回归模型使用示例# 多项式回归 (Polynomial Regression) from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures from sklearn.metrics import mean_squared_error, r2_score # 1. 构造强非线性测试数据模拟生物生长曲线 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成100个自变量数据范围在0-15 X np.random.rand(100, 1) * 15 # 真实的强非线性关系使用类似S型曲线的函数Logistic生长模型的变形 # Y 100 / (1 exp(-0.5*(X-7))) 随机噪声 # 这个关系模拟了生物生长曲线初期缓慢中期快速增长后期趋于饱和 Y_true 100 / (1 np.exp(-0.5 * (X - 7))) Y Y_true np.random.randn(100, 1) * 5 # 加入标准差为5的噪声 # 2. 多项式回归使用三次多项式 # 转换特征添加平方和立方项 poly_features PolynomialFeatures(degree3, include_biasFalse) X_poly poly_features.fit_transform(X) # 使用线性回归拟合转换后的特征 model LinearRegression() model.fit(X_poly, Y) # 预测 Y_pred model.predict(X_poly) # 打印模型参数 print(多项式回归模型参数三次多项式) print(f截距: {model.intercept_[0]:.2f}) print(f系数: {model.coef_[0]}) # 评估模型 mse mean_squared_error(Y, Y_pred) r2 r2_score(Y, Y_pred) print(f\n模型评估) print(f均方误差 (MSE): {mse:.2f}) print(f决定系数 (R²): {r2:.2f}) # 3. 使用线性回归作为对比 linear_model LinearRegression() linear_model.fit(X, Y) Y_linear_pred linear_model.predict(X) # 评估线性回归模型 linear_mse mean_squared_error(Y, Y_linear_pred) linear_r2 r2_score(Y, Y_linear_pred) print(f\n线性回归模型评估) print(f均方误差 (MSE): {linear_mse:.2f}) print(f决定系数 (R²): {linear_r2:.2f}) # 4. 使用matplotlib绘制图像 #... 省略 ... ## 运行结果 多项式回归模型参数三次多项式 截距: 8.70 系数: [-4.29511575 2.09659382 -0.09560718] 模型评估 均方误差 (MSE): 20.02 决定系数 (R²): 0.98 线性回归模型评估 均方误差 (MSE): 56.71 决定系数 (R²): 0.95 从示例可以看出线性回归只能用一条直线拟合所有数据无法捕捉到S型曲线的弯曲特征。多项式回归能够更好地贴合数据的非线性模式尤其是在曲线的弯曲部分这种对比清晰地展示了多项式回归在处理非线性数据时的优势。1.3. 逻辑回归 (Logistic Regression)一句话概念虽然叫“回归”但其实是做分类的。它预测的是事件发生的概率0到1之间输出结果通常通过阈值如0.5划分为两类。使用场景预测用户是否会购买是/否、病人是否患病、邮件是否为垃圾邮件。逻辑回归模型使用示例# 逻辑回归 (Logistic Regression) from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 1. 构造二分类测试数据模拟用户购买预测场景 np.random.seed(42) # 设置随机种子以确保结果可复现 # 类别0不会购买的用户特征如浏览时长和页面访问量 n_class0 100 class0_features np.random.randn(n_class0, 2) * 1.5 [3, 3] class0_labels np.zeros(n_class0) # 类别1会购买的用户特征 n_class1 100 class1_features np.random.randn(n_class1, 2) * 1.5 [6, 6] class1_labels np.ones(n_class1) # 合并数据集 X np.vstack([class0_features, class1_features]) y np.hstack([class0_labels, class1_labels]) # 2. 训练逻辑回归模型 model LogisticRegression() model.fit(X, y) # 预测 y_pred_proba model.predict_proba(X)[:, 1] y_pred model.predict(X) # 模型评估 accuracy accuracy_score(y, y_pred) print(f逻辑回归模型准确率: {accuracy:.2f}) # 3. 绘制图像 #... 省略 ... ## 运行结果 逻辑回归模型准确率: 0.93 这个示例清晰展示了逻辑回归如何进行二分类预测并通过可视化直观呈现了分类结果、决策边界和概率分布完全符合逻辑回归的应用场景预测事件发生概率。1.4. 分位数回归 (Quantile Regression)一句话概念普通回归预测的是“平均值”而分位数回归可以预测“中位数”或者任意百分位点如前10%。使用场景数据中有极端异常值离群点或者你想研究不同层级的数据如分析贫困人口和富裕人口的收入影响因素差异。分位数回归模型使用示例# 分位数回归 (Quantile Regression) import statsmodels.api as sm from sklearn.linear_model import LinearRegression # 1. 构造包含极端异常值的测试数据 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成基础自变量数据如收入 X np.linspace(10, 100, 100).reshape(-1, 1) # 基础线性关系消费 0.6 * 收入 10 随机噪声 Y_true 0.6 * X 10 Y Y_true np.random.normal(0, 5, sizeX.shape) # 加入正常噪声 # 添加极端异常值模拟高消费人群的极端消费行为 # 选择最后10个数据点添加大的正异常值 Y[-10:] np.random.normal(100, 20, size(10, 1)) # 2. 普通线性回归 linear_model LinearRegression() linear_model.fit(X, Y) Y_linear_pred linear_model.predict(X) # 3. 分位数回归 # 添加常数项 X_with_const sm.add_constant(X) # 定义要估计的分位数 quantiles [0.1, 0.5, 0.9] quantile_results {} # 拟合不同分位数的模型 for q in quantiles: model sm.QuantReg(Y, X_with_const) result model.fit(qq) quantile_results[q] result # 4. 预测不同分位数的结果 Y_quantile_pred {} for q in quantiles: Y_quantile_pred[q] quantile_results[q].predict(X_with_const) # 5. 绘制图像 #... 省略 ... # 打印模型参数对比 print(\n 模型参数对比 ) print( f普通线性回归: 截距{linear_model.intercept_[0]:.2f}, 斜率{linear_model.coef_[0][0]:.2f} ) for q in quantiles: intercept quantile_results[q].params[0] slope quantile_results[q].params[1] print(f分位数回归(τ{q:.1f}): 截距{intercept:.2f}, 斜率{slope:.2f}) ## 运行结果 模型参数对比 普通线性回归: 截距-13.59, 斜率1.20 分位数回归(τ0.1): 截距0.59, 斜率0.66 分位数回归(τ0.5): 截距6.95, 斜率0.67 分位数回归(τ0.9): 截距-3.01, 斜率1.73 从图中可以看出不同分位数的回归线斜率和截距各不相同高消费分位(τ0.9)的回归线最接近异常值而低消费分位(τ0.1)的回归线几乎不受异常值影响中位数回归(τ0.5)相对普通线性回归更能抵抗异常值的影响这个示例清晰地展示了分位数回归如何处理极端异常值以及如何通过不同分位数分析数据的不同层级结构非常适合用户描述的使用场景数据中有极端异常值或需要研究不同层级数据。1.5. 岭回归 (Ridge Regression)一句话概念在线性回归的基础上加了一个“惩罚项”L2正则化防止模型为了迎合训练数据而变得太复杂过拟合。使用场景特征之间相关性很高多重共线性导致普通回归失效时。岭回归模型使用示例# 岭回归 (Ridge Regression) from sklearn.linear_model import LinearRegression, Ridge from sklearn.metrics import mean_squared_error from sklearn.preprocessing import StandardScaler # 1. 构造具有多重共线性的测试数据 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成基础特征如房屋的总面积 X1 np.random.rand(100, 1) * 100 50 # 50-150平方米 # 生成高度相关的第二个特征如房屋的可用面积 # 设置高度相关性X2 0.8*X1 少量噪声 X2 0.8 * X1 np.random.randn(100, 1) * 5 X np.hstack([X1, X2]) # 合并两个特征 # 真实的线性关系房价 10000*X1 8000*X2 500000 随机噪声 Y_true 10000 * X1 8000 * X2 500000 Y Y_true np.random.randn(100, 1) * 200000 # 加入噪声 # 2. 数据标准化岭回归对特征缩放敏感 scaler StandardScaler() X_scaled scaler.fit_transform(X) Y_scaled scaler.fit_transform(Y) # 3. 普通线性回归 linear_model LinearRegression() linear_model.fit(X_scaled, Y_scaled) Y_linear_pred linear_model.predict(X_scaled) # 4. 岭回归不同的正则化参数λ # 移除0值以避免log10(0)的警告 lambdas [0.1, 1, 10, 100, 1000] # 不同的λ值 ridge_models {} ridge_preds {} ridge_coefs [] for lam in lambdas: model Ridge(alphalam) model.fit(X_scaled, Y_scaled) ridge_models[lam] model ridge_preds[lam] model.predict(X_scaled) ridge_coefs.append(model.coef_.flatten()) # 5. 可视化结果 #... 省略 ... # 计算并比较MSE print(\n 模型性能比较 (MSE) ) print(f普通线性回归 MSE: {mean_squared_error(Y_scaled, Y_linear_pred):.4f}) for lam in lambdas: mse mean_squared_error(Y_scaled, ridge_preds[lam]) print(f岭回归 (λ{lam}) MSE: {mse:.4f}) ## 运行结果 模型性能比较 (MSE) 普通线性回归 MSE: 0.1705 岭回归 (λ0.1) MSE: 0.1705 岭回归 (λ1) MSE: 0.1706 岭回归 (λ10) MSE: 0.1730 岭回归 (λ100) MSE: 0.2645 岭回归 (λ1000) MSE: 0.7486 从图中可以看出普通线性回归在多重共线性下系数可能不稳定随着λ增大岭回归系数逐渐减小并趋向稳定合适的λ值可以在保持预测准确性的同时提高模型稳定性
回归分析全家桶(16种回归模型实现方式总结)
发布时间:2026/7/1 8:25:07
回归分析全家桶下面介绍如何使用各种回归模型的示例代码主要分为以下一些步骤模拟数据创建适合某种回归模型的测试数据创建回归模型并训练主要使用scikit-learn这个库评估模型有时会和其他回归模型对比可视化模型使用matplotlib这个库简单展示模型效果由于担心文章篇幅太长文中的示例没有贴出完整的代码特别是可视化部分的代码比较繁琐文中都省略了文章末尾提供了完整代码一个jupyter notebook文件的下载地址包括了所有可视化的代码。下面的代码中统一导入了下面的库import pandas as pd import numpy as np import matplotlib import matplotlib.pyplot as plt # 为了显示中文 matplotlib.rcParams[font.sans-serif] [Microsoft YaHei Mono] matplotlib.rcParams[axes.unicode_minus] False1.1. 线性回归 (Linear Regression)一句话概念最基础的回归假设自变量X和因变量Y之间是“直来直去”的线性关系。使用场景预测房价、销售额等连续数值且数据没有明显的复杂非线性关系。线性回归模型使用示例# 线性回归 (Linear Regression) from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score # 构造测试数据 # 假设我们要模拟房屋面积自变量X和房价因变量Y的关系 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成100个房屋面积数据范围在50-200平方米 X np.random.rand(100, 1) * 150 50 # 真实的线性关系房价 5000 * 面积 100000 随机噪声 # 其中5000是每平方米的价格100000是基础价格 # 加入一些随机噪声使数据更真实 Y_true 5000 * X 100000 Y Y_true np.random.randn(100, 1) * 50000 # 加入标准差为50000的噪声 # 使用线性回归模型 model LinearRegression() model.fit(X, Y) # 预测 Y_pred model.predict(X) # 打印模型参数 print(线性回归模型参数) print(f截距基础价格: {model.intercept_[0]:.2f}) print(f斜率每平方米价格: {model.coef_[0][0]:.2f}) # 评估模型 mse mean_squared_error(Y, Y_pred) r2 r2_score(Y, Y_pred) print(f\n模型评估) print(f均方误差 (MSE): {mse:.2f}) print(f决定系数 (R²): {r2:.2f}) # 使用matplotlib绘制图像 #... 省略 ... ## 运行结果 线性回归模型参数 截距基础价格: 118417.69 斜率每平方米价格: 4846.74 模型评估 均方误差 (MSE): 2016461409.92 决定系数 (R²): 0.96 1.2. 多项式回归 (Polynomial Regression)一句话概念当数据不是直线分布而是像曲线一样弯曲时我们给自变量加上平方、立方等“高次项”来拟合曲线。使用场景拟合生物生长曲线、由于边际效应递减导致的经济学数据等非线性关系。多项式回归模型使用示例# 多项式回归 (Polynomial Regression) from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures from sklearn.metrics import mean_squared_error, r2_score # 1. 构造强非线性测试数据模拟生物生长曲线 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成100个自变量数据范围在0-15 X np.random.rand(100, 1) * 15 # 真实的强非线性关系使用类似S型曲线的函数Logistic生长模型的变形 # Y 100 / (1 exp(-0.5*(X-7))) 随机噪声 # 这个关系模拟了生物生长曲线初期缓慢中期快速增长后期趋于饱和 Y_true 100 / (1 np.exp(-0.5 * (X - 7))) Y Y_true np.random.randn(100, 1) * 5 # 加入标准差为5的噪声 # 2. 多项式回归使用三次多项式 # 转换特征添加平方和立方项 poly_features PolynomialFeatures(degree3, include_biasFalse) X_poly poly_features.fit_transform(X) # 使用线性回归拟合转换后的特征 model LinearRegression() model.fit(X_poly, Y) # 预测 Y_pred model.predict(X_poly) # 打印模型参数 print(多项式回归模型参数三次多项式) print(f截距: {model.intercept_[0]:.2f}) print(f系数: {model.coef_[0]}) # 评估模型 mse mean_squared_error(Y, Y_pred) r2 r2_score(Y, Y_pred) print(f\n模型评估) print(f均方误差 (MSE): {mse:.2f}) print(f决定系数 (R²): {r2:.2f}) # 3. 使用线性回归作为对比 linear_model LinearRegression() linear_model.fit(X, Y) Y_linear_pred linear_model.predict(X) # 评估线性回归模型 linear_mse mean_squared_error(Y, Y_linear_pred) linear_r2 r2_score(Y, Y_linear_pred) print(f\n线性回归模型评估) print(f均方误差 (MSE): {linear_mse:.2f}) print(f决定系数 (R²): {linear_r2:.2f}) # 4. 使用matplotlib绘制图像 #... 省略 ... ## 运行结果 多项式回归模型参数三次多项式 截距: 8.70 系数: [-4.29511575 2.09659382 -0.09560718] 模型评估 均方误差 (MSE): 20.02 决定系数 (R²): 0.98 线性回归模型评估 均方误差 (MSE): 56.71 决定系数 (R²): 0.95 从示例可以看出线性回归只能用一条直线拟合所有数据无法捕捉到S型曲线的弯曲特征。多项式回归能够更好地贴合数据的非线性模式尤其是在曲线的弯曲部分这种对比清晰地展示了多项式回归在处理非线性数据时的优势。1.3. 逻辑回归 (Logistic Regression)一句话概念虽然叫“回归”但其实是做分类的。它预测的是事件发生的概率0到1之间输出结果通常通过阈值如0.5划分为两类。使用场景预测用户是否会购买是/否、病人是否患病、邮件是否为垃圾邮件。逻辑回归模型使用示例# 逻辑回归 (Logistic Regression) from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 1. 构造二分类测试数据模拟用户购买预测场景 np.random.seed(42) # 设置随机种子以确保结果可复现 # 类别0不会购买的用户特征如浏览时长和页面访问量 n_class0 100 class0_features np.random.randn(n_class0, 2) * 1.5 [3, 3] class0_labels np.zeros(n_class0) # 类别1会购买的用户特征 n_class1 100 class1_features np.random.randn(n_class1, 2) * 1.5 [6, 6] class1_labels np.ones(n_class1) # 合并数据集 X np.vstack([class0_features, class1_features]) y np.hstack([class0_labels, class1_labels]) # 2. 训练逻辑回归模型 model LogisticRegression() model.fit(X, y) # 预测 y_pred_proba model.predict_proba(X)[:, 1] y_pred model.predict(X) # 模型评估 accuracy accuracy_score(y, y_pred) print(f逻辑回归模型准确率: {accuracy:.2f}) # 3. 绘制图像 #... 省略 ... ## 运行结果 逻辑回归模型准确率: 0.93 这个示例清晰展示了逻辑回归如何进行二分类预测并通过可视化直观呈现了分类结果、决策边界和概率分布完全符合逻辑回归的应用场景预测事件发生概率。1.4. 分位数回归 (Quantile Regression)一句话概念普通回归预测的是“平均值”而分位数回归可以预测“中位数”或者任意百分位点如前10%。使用场景数据中有极端异常值离群点或者你想研究不同层级的数据如分析贫困人口和富裕人口的收入影响因素差异。分位数回归模型使用示例# 分位数回归 (Quantile Regression) import statsmodels.api as sm from sklearn.linear_model import LinearRegression # 1. 构造包含极端异常值的测试数据 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成基础自变量数据如收入 X np.linspace(10, 100, 100).reshape(-1, 1) # 基础线性关系消费 0.6 * 收入 10 随机噪声 Y_true 0.6 * X 10 Y Y_true np.random.normal(0, 5, sizeX.shape) # 加入正常噪声 # 添加极端异常值模拟高消费人群的极端消费行为 # 选择最后10个数据点添加大的正异常值 Y[-10:] np.random.normal(100, 20, size(10, 1)) # 2. 普通线性回归 linear_model LinearRegression() linear_model.fit(X, Y) Y_linear_pred linear_model.predict(X) # 3. 分位数回归 # 添加常数项 X_with_const sm.add_constant(X) # 定义要估计的分位数 quantiles [0.1, 0.5, 0.9] quantile_results {} # 拟合不同分位数的模型 for q in quantiles: model sm.QuantReg(Y, X_with_const) result model.fit(qq) quantile_results[q] result # 4. 预测不同分位数的结果 Y_quantile_pred {} for q in quantiles: Y_quantile_pred[q] quantile_results[q].predict(X_with_const) # 5. 绘制图像 #... 省略 ... # 打印模型参数对比 print(\n 模型参数对比 ) print( f普通线性回归: 截距{linear_model.intercept_[0]:.2f}, 斜率{linear_model.coef_[0][0]:.2f} ) for q in quantiles: intercept quantile_results[q].params[0] slope quantile_results[q].params[1] print(f分位数回归(τ{q:.1f}): 截距{intercept:.2f}, 斜率{slope:.2f}) ## 运行结果 模型参数对比 普通线性回归: 截距-13.59, 斜率1.20 分位数回归(τ0.1): 截距0.59, 斜率0.66 分位数回归(τ0.5): 截距6.95, 斜率0.67 分位数回归(τ0.9): 截距-3.01, 斜率1.73 从图中可以看出不同分位数的回归线斜率和截距各不相同高消费分位(τ0.9)的回归线最接近异常值而低消费分位(τ0.1)的回归线几乎不受异常值影响中位数回归(τ0.5)相对普通线性回归更能抵抗异常值的影响这个示例清晰地展示了分位数回归如何处理极端异常值以及如何通过不同分位数分析数据的不同层级结构非常适合用户描述的使用场景数据中有极端异常值或需要研究不同层级数据。1.5. 岭回归 (Ridge Regression)一句话概念在线性回归的基础上加了一个“惩罚项”L2正则化防止模型为了迎合训练数据而变得太复杂过拟合。使用场景特征之间相关性很高多重共线性导致普通回归失效时。岭回归模型使用示例# 岭回归 (Ridge Regression) from sklearn.linear_model import LinearRegression, Ridge from sklearn.metrics import mean_squared_error from sklearn.preprocessing import StandardScaler # 1. 构造具有多重共线性的测试数据 np.random.seed(42) # 设置随机种子以确保结果可复现 # 生成基础特征如房屋的总面积 X1 np.random.rand(100, 1) * 100 50 # 50-150平方米 # 生成高度相关的第二个特征如房屋的可用面积 # 设置高度相关性X2 0.8*X1 少量噪声 X2 0.8 * X1 np.random.randn(100, 1) * 5 X np.hstack([X1, X2]) # 合并两个特征 # 真实的线性关系房价 10000*X1 8000*X2 500000 随机噪声 Y_true 10000 * X1 8000 * X2 500000 Y Y_true np.random.randn(100, 1) * 200000 # 加入噪声 # 2. 数据标准化岭回归对特征缩放敏感 scaler StandardScaler() X_scaled scaler.fit_transform(X) Y_scaled scaler.fit_transform(Y) # 3. 普通线性回归 linear_model LinearRegression() linear_model.fit(X_scaled, Y_scaled) Y_linear_pred linear_model.predict(X_scaled) # 4. 岭回归不同的正则化参数λ # 移除0值以避免log10(0)的警告 lambdas [0.1, 1, 10, 100, 1000] # 不同的λ值 ridge_models {} ridge_preds {} ridge_coefs [] for lam in lambdas: model Ridge(alphalam) model.fit(X_scaled, Y_scaled) ridge_models[lam] model ridge_preds[lam] model.predict(X_scaled) ridge_coefs.append(model.coef_.flatten()) # 5. 可视化结果 #... 省略 ... # 计算并比较MSE print(\n 模型性能比较 (MSE) ) print(f普通线性回归 MSE: {mean_squared_error(Y_scaled, Y_linear_pred):.4f}) for lam in lambdas: mse mean_squared_error(Y_scaled, ridge_preds[lam]) print(f岭回归 (λ{lam}) MSE: {mse:.4f}) ## 运行结果 模型性能比较 (MSE) 普通线性回归 MSE: 0.1705 岭回归 (λ0.1) MSE: 0.1705 岭回归 (λ1) MSE: 0.1706 岭回归 (λ10) MSE: 0.1730 岭回归 (λ100) MSE: 0.2645 岭回归 (λ1000) MSE: 0.7486 从图中可以看出普通线性回归在多重共线性下系数可能不稳定随着λ增大岭回归系数逐渐减小并趋向稳定合适的λ值可以在保持预测准确性的同时提高模型稳定性