StatsModel线性回归:初始模型与精简模型孰优孰劣?
模型优劣判断方法
判断线性回归模型的好坏,核心看拟合能力、简洁性、稳定性、泛化能力这几个维度,结合你的场景,按以下步骤逐一验证:
1. 核心拟合指标对比
- 调整R²(Adjusted R²):这是比R²更可靠的指标,它会惩罚无效特征。如果精简模型的调整R²和初始模型接近甚至更高,说明用更少的特征达到了差不多的拟合效果,模型更优。
- 残差标准差(Std. Error of the Regression):这个值越小,代表模型的预测误差波动越小,精度越高。对比两个模型的该指标,数值更小的模型更优。
2. 特征的统计显著性
检查两个模型中特征的p值(P>|t|):
- 如果精简模型里的特征大多p值<0.05(通用显著性水平),说明这些特征确实和因变量
TotalCharge有显著关联;反之如果有大量p值>0.05的特征,说明RFE筛选的特征质量不高。 - 初始模型可能存在很多不显著的特征,这些特征只会增加模型复杂度,对预测没有帮助。
3. 多重共线性验证
对比两个模型的VIF(方差膨胀因子):
- VIF>5(或10)代表存在严重共线性,会导致系数估计不稳定。如果精简模型的VIF普遍低于初始模型,说明模型更稳定,结果更可信。
4. 简洁性与泛化能力
- 精简模型用更少的特征(从代码看初始模型特征数是
X_data.shape[1],精简模型是8个),更易解释,也更不容易出现过拟合(在新数据上的预测表现更好)。 - 学校作业通常更看重可解释性,精简模型在这方面更有优势。
5. 用验证集测试预测效果
把数据集拆分成训练集和验证集,用两个模型分别在验证集上预测,计算以下误差指标:
- MAE(平均绝对误差)、MSE(均方误差)、RMSE(均方根误差)
- 误差越小,模型的预测能力越强。
示例代码(Scikit-learn):
from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 拆分初始模型数据 X_train, X_test, y_train, y_test = train_test_split(X_data, Y_data, test_size=0.2, random_state=42) model_initial = LinearRegression() model_initial.fit(X_train, y_train) y_pred_initial = model_initial.predict(X_test) rmse_initial = mean_squared_error(y_test, y_pred_initial, squared=False) # 拆分精简模型数据 X_train2, X_test2, y_train2, y_test2 = train_test_split(X_data2, Y_data2, test_size=0.2, random_state=42) model_simplified = LinearRegression() model_simplified.fit(X_train2, y_train2) y_pred_simplified = model_simplified.predict(X_test2) rmse_simplified = mean_squared_error(y_test2, y_pred_simplified, squared=False) print(f"初始模型RMSE: {rmse_initial:.2f}") print(f"精简模型RMSE: {rmse_simplified:.2f}")
针对你的额外建议
- 核对RFE参数:你提到用RFE筛选了3个特征,但代码里
X_data2有8个特征,可能是参数设置错误(比如n_features_to_select设成了8),可以检查RFE的代码确认。 - 优先看调整R²和RMSE:这两个指标是判断模型优劣的核心,先对比这两个值,再结合特征显著性和共线性做最终判断。
内容的提问来源于stack exchange,提问作者bale53
相关产品推荐
相关产品推荐

