系统学习机器学习之特征工程(三)--多重共线性

本文深入探讨了多重共线性这一统计学概念,解释了它如何在预测变量间相关时影响回归模型的稳定性,以及如何通过VIF和条件数等指标进行度量。此外,还介绍了几种纠正多重共线性的方法。

什么是多重共线性?

回归中的多重共线性是一个当模型中一些预测变量与其他预测变量相关时发生的条件。严重的多重共线性可能会产生问题,因为它可以增大回归系数的方差,使它们变得不稳定。以下是不稳定系数导致的一些后果:

  • 即使预测变量和响应之间存在显著关系,系数也可能看起来并不显著。
  • 高度相关的预测变量的系数在样本之间差异很大。
  • 从模型中去除任何高度相关的项都将大幅影响其他高度相关项的估计系数。高度相关项的系数甚至会包含错误的符号。

其实,通俗来讲,就是说,假设变量A、B都对结果Y有影响,也就是,A、B是你回归模型中的特征,一般我们假设特征都是IID,实际中A、B相关的情况是避免不了的,因此,在A、B相关的情况下,需要控制A或者B,否则结果会有偏,回归系数的方差,跟A、B的相关程度有关,如果相关性太强,结果显著性就不好,这种情况叫做多重共线性。

要度量多重共线性,可以检查预测变量的相关性结构,也可以查看方差膨胀因子 (VIF)。VIF 用于在您的预测变量相关时,度量估计回归系数的方差增加的幅度。如果所有 VIF 都为 1,则不存在多重共线性,但如果有些 VIF 大于 1,则预测变量为相关。VIF 大于 5 时,该项的回归系数的估计结果不理想。如果某个预测变量与其他预测变量的关联接近完美,则 Minitab 将显示一条消息,指出无法估计该项。无法估计的项的 VIF 值数通常超过十亿。

方差膨胀因子(Variance Inflation Factor),计算方法如下,对每个变量构建一个如下的最小二乘模型:

对于线性回归模型来说,模型的方差就是估计出的系数方差:

多重共线性反映在最后一项上,也就是说系数的方差变大了。方差膨胀因子,用于在预测变量相关时,度量估计回归系数的方差增加的幅度:

其中R^2为模型的确定系数,计算公式如下:

其中: 

矩阵的特征值也可以用来衡量变量之间的共线性,如果几个变量之前存在共线性问题,那么有几个特征值就很小。

另外一个指标是条件数(Condition Number),条件数的计算方法为最大的特征值除上最小的特征值:

K = \frac{\lambda _{max} }{\lambda _{min} }

当矩阵的条件数较小时说明该矩阵的共线性问题较小,当条件数较大时则表示数据可能存在比较大的共线性问题。一般来说,条件数在100以下则表示问题不大,在100到1000之间可能需要关注下共线性问题,如果大于1000则表示存在比较严重的共线性问题。

每一个特征值都对应一个条件指数(Condition Indices),计算方法为最大的特征值除上当前特征值:

K_{i} = \frac{\lambda _{max} }{\lambda _{i} }

方差比例(Variance Proportion)可以用来找出存在共线性的变量,方差比例体现了变量对于特征值的贡献程度,当一个特征值对应的几个变量的方差比例同时比较大时,则表示这几个变量可能存在多重共线性,方差比例的计算方法如下:

首先求得每个特征值所对应的特征向量:

V_{i} = (V_{i1},V_{i2},V_{i3},...V_{im})

\phi_{ij} = \frac{v_{ij}^2}{\lambda_i},\phi_i = \sum_{i=1}^m \phi_{ij}ϕ​ij​​=​λ​i​​​​v​ij​2​​​​,ϕ​i​​=​i=1​∑​m​​ϕ​ij​​

于是,第i个特征值所对应的第j个变量的方差分解比例为:

\pi_{ij} = \frac{\phi_{ij}}{\phi_j}

在分析多重共线性问题时,一般会先找到最大的条件指数,看是否在容忍范围内,若超出范围,则在该行找到方差比例较大的几个变量,这几个变量即可能存在多重共线性的问题。

多重共线性不会影响拟合优度和预测优度。系数(线性判别函数)无法可靠地进行解译,但拟合(分类)值不会受到影响。

注意:多重共线性在判别分析中的效应与在回归中相同。

补充一份来自知乎的解释:

 

其实,到这里应该就很清楚了,也就是说,多重共线性影响的是模型的系数确定性、解释性,通俗一点讲,就是线性回归模型的系数没有训练准确。 

多重共线性的纠正方法

严重多重共线性的可能解决办法:

  • 如果要对多项式进行拟合,请将预测变量值减去预测变量的均值。
  • 从模型中删除那些高度相关的预测变量。由于它们提供了冗余信息,因此删除它们通常不会显著减少 R2。考虑使用逐步回归、最佳子集回归或数据集的专门知识来删除这些变量。
  • 使用偏最小二乘或主成分分析。这些方法可以将预测变量的数量减少为更小的不相关分量集。
  • 增加样本数,实际上,对大多数模型来说,多重共线性并不是一个很严重的问题
<think>嗯,我现在要介绍一下Python机器学习中的线性回归基础。首先,我需要确认自己对线性回归的理解是否正确。线性回归是一种用于预测连续数值的监督学习算法,对吧?它的基本思想是找到自变量和因变量之间的线性关系,然后根据这个关系进行预测。 那线性回归的数学模型是什么呢?应该是类似y = wx + b这样的形式,其中w是权重,b是偏置项。对于多元线性回归,可能会有多个特征,所以公式应该是y = w1x1 + w2x2 + ... + wnxn + b。这里的目标是找到最佳的w和b,使得预测值和实际值的误差最小,通常使用最小二乘法来优化。 接下来,我需要考虑如何在Python中实现线性回归。常用的库应该是scikit-learn,里面的LinearRegression类应该可以直接用。不过在使用之前,可能需要先导入必要的库,比如numpy处理数据,pandas读取数据,matplotlib进行可视化,还有sklearn本身。 数据预处理的步骤也很重要。比如,数据是否需要标准化或归一化?线性回归对特征的尺度敏感吗?我记得如果特征尺度差异大,可能会影响梯度下降的收敛速度,所以可能需要做特征缩放。不过scikit-learn的线性回归是否自动处理这些呢?可能不是,所以预处理步骤可能需要自己完成。 然后,分割数据集为训练集和测试集,用train_test_split函数。训练模型之后,评估指标通常用均方误差(MSE)或者R²分数。R²分数越接近1,说明模型拟合得越好。 有没有可能出现过拟合或者欠拟合的情况?线性回归本身比较简单,可能容易欠拟合,特别是在数据存在非线性关系的时候。这时候可能需要考虑多项式回归或者其他更复杂的模型。 举个例子,比如用波士顿房价数据集,但听说这个数据集已经被移除了,可能需要用其他数据集替代,比如加利福尼亚房价数据集。加载数据,处理数据,分割,训练,预测,评估这些步骤都要走一遍。 另外,可能需要可视化结果,比如画出回归线,或者残差图,看看预测值和实际值的差异分布。残差应该随机分布,没有明显的模式,否则可能模型有问题。 还有,线性回归的假设条件,比如线性关系、误差项的正态性、同方差性、无自相关、无多重共线性等,这些假设是否满足会影响模型的效果。如果数据不满足这些假设,可能需要做一些变换或者使用其他方法。 总之,步骤大概是:导入库,加载数据,数据预处理,分割数据集,训练模型,预测,评估,可视化,最后检查假设是否成立。可能还要讨论一下模型的系数,看看每个特征对目标变量的影响大小和方向。 在写代码示例的时候,需要注意正确导入库,处理数据,比如处理缺失值,可能需要用SimpleImputer填充,或者删除有缺失的样本。特征工程部分是否需要加入多项式特征?如果是线性回归基础的话可能不需要,但可以提到更高阶的方法。 最后,总结线性回归的优缺点,比如简单、可解释性强,但可能无法捕捉复杂关系。适用场景是当因变量和自变量之间存在线性或近似线性的关系时。</think>### 线性回归基础介绍 #### 一、核心概念 线性回归是**监督学习**中用于预测连续型变量的基础算法,核心是建立自变量(特征)$X$ 与因变量(目标值)$y$ 之间的线性关系。其数学表达式为: $$ y = w_1x_1 + w_2x_2 + \dots + w_nx_n + b $$ 其中: - $w_i$:特征权重(系数) - $b$:偏置项(截距) #### 二、核心步骤 1. **目标函数** 最小化预测值与真实值的**均方误差**(MSE): $$ \text{MSE} = \frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2 $$ 2. **求解方法** - **正规方程**:直接通过矩阵运算求解权重(适用于小数据集) $$ w = (X^T X)^{-1} X^T y $$ - **梯度下降**:迭代优化权重(适合大数据集) --- #### 、Python实现(以加利福尼亚房价数据集为例) ##### 1. 导入库 ```python import numpy as np import pandas as pd from sklearn.datasets import fetch_california_housing from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score ``` ##### 2. 数据加载与预处理 ```python # 加载数据集 data = fetch_california_housing() X = data.data # 特征矩阵 (20640个样本 × 8个特征) y = data.target # 目标值 (房价中位数) # 分割数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` ##### 3. 模型训练与预测 ```python # 创建模型 model = LinearRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` ##### 4. 模型评估 ```python # 计算MSE和R²分数 mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"MSE: {mse:.2f}, R²: {r2:.2f}") ``` ##### 5. 查看权重与截距 ```python print("权重:", model.coef_) # 每个特征的影响系数 print("截距:", model.intercept_) ``` --- #### 四、关键注意事项 1. **特征缩放** - 若使用梯度下降,建议通过`StandardScaler`标准化数据 2. **多重共线性** - 高度相关的特征会导致权重不稳定,可通过方差膨胀因子(VIF)检测 3. **假设检验** - 残差应满足正态性、独立性、同方差性(可通过QQ图、残差图诊断) --- #### 五、优缺点分析 | **优点** | **缺点** | |------------------------------|------------------------------| | 计算效率高,适合大数据集 | 无法捕捉非线性关系 | | 结果可解释性强(权重含义明确) | 对异常值敏感 | | 可作为复杂模型的基线模型 | 需严格满足统计假设 | --- #### 六、适用场景 - 房价预测、销售额预测等**连续值预测** - 分析特征与目标变量之间的**线性关系强度** - 作为其他算法(如正则化回归、神经网络)的基础组件 通过上述步骤,您可快速掌握线性回归的核心原理与Python实现方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值