如何使用Python处理多重共线性,通过VIF和岭回归参数正则化优化模型?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1152个文字,预计阅读时间需要5分钟。
直接计算每个特征的方差膨胀因子(VIF)最有效。VIF大于5是常见警戒线,大于10基本确认存在多重共线性。注意,VIF只对线性回归有意义,且必须在标准化后的数据上计算——标准化会扭曲VIF的解释逻辑。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
from statsmodels.stats.outliers_influence import variance_inflation_factor,传入完整设计矩阵X(含截距项或不带均可,但要保持一致)和列索引 - 别对
X先做StandardScaler().fit_transform()再算 VIF;若需缩放,等 VIF 筛选完再做 - 遇到
LinAlgError: Singular matrix,说明某列是其他列的精确线性组合,先用np.linalg.matrix_rank(X)检查秩亏,再删掉全零列、重复列或高相关列(如np.corrcoef(X.T)查 > 0.95 的对)
岭回归里 alpha 怎么选才不靠猜
alpha 不是越大越好,也不是越小越接近 OLS;它本质是在偏差-方差之间找平衡点。盲目设 alpha=1 或 alpha=0.01 很可能让模型既不稳定又欠拟合。
本文共计1152个文字,预计阅读时间需要5分钟。
直接计算每个特征的方差膨胀因子(VIF)最有效。VIF大于5是常见警戒线,大于10基本确认存在多重共线性。注意,VIF只对线性回归有意义,且必须在标准化后的数据上计算——标准化会扭曲VIF的解释逻辑。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
from statsmodels.stats.outliers_influence import variance_inflation_factor,传入完整设计矩阵X(含截距项或不带均可,但要保持一致)和列索引 - 别对
X先做StandardScaler().fit_transform()再算 VIF;若需缩放,等 VIF 筛选完再做 - 遇到
LinAlgError: Singular matrix,说明某列是其他列的精确线性组合,先用np.linalg.matrix_rank(X)检查秩亏,再删掉全零列、重复列或高相关列(如np.corrcoef(X.T)查 > 0.95 的对)
岭回归里 alpha 怎么选才不靠猜
alpha 不是越大越好,也不是越小越接近 OLS;它本质是在偏差-方差之间找平衡点。盲目设 alpha=1 或 alpha=0.01 很可能让模型既不稳定又欠拟合。

