[统计]_数据中心化和标准化对线性回归结果的影响

本文探讨了在进行线性回归时,数据中心化和标准化对模型的影响。中心化仅改变截距,不影响拟合程度;标准化则同时改变截距和斜率,但模型解释程度保持一致。标准化的意义在于消除量纲差异。对于追求模型可解释性的场景,原始数据或中心化数据也可适用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        很多同学在做线性回归的时候,不明白到底是直接那原始数据跑,还是要用中心化的数据跑,或者还是用标准化的数据跑。先说结论,相对于原始回归模型,中心化回归模型只是截距发生了改变(相当于平移到原点),标准化回归模型截距和斜率都有改变,但三个模型的拟合程度都是一致的,就是自变量对因变量的解释程度没有变化。

        现在我们就具体看一下中心化和标准化对线性回归有哪些影响。

        中心化其实就是把每个数据减去那列的均值,标准化其实就是对中心化后的数据再除以数据的标准差。在R里面中心化和标准化都可以用scale()计算, 只是在参数上会有一些变化。

        数据中心化:scale(data,center=T,scale=F)

        数据标准化:scale(data,center=T,scale=T)

        还是以著名的iris数据集为例,因为数据集最后一列是字符型数据,所以我们取前四列数值型数据

data=iris[1:4]

        数据集长这样,是一个150行4列的数据集。

         我们对它进行回归分析

model_raw=lm(Sepal.Length~Sepal.Width+Petal
### 多元线性回归中的中心化处理 在多元线性回归模型中,当对自变量进行中心化处理时,截距项会发生变化,而其他回归系数则保持不变。为了证明这一点,考虑原始的多元线性回归方程: \[ y_i = \beta_0 + \sum_{j=1}^{p}\beta_j x_{ij} + \epsilon_i, \quad i = 1,\ldots,n \] 其中 \(y_i\) 是因变量观测值;\(x_{ij}\) 表示第 \(i\) 个样本点上第 \(j\) 个预测因子(即解释变量)的取值;\(\beta_j (j = 0,..., p)\) 是待估计参数向量;最后 \(\epsilon_i\) 代表随机误差。 如果我们将每个特征减其均值,则得到新的矩阵形式如下所示[^1]: \[ X_c=(X-\bar{X})=\begin{pmatrix} (x_{11}-\overline{x}_1)&...&(x_{1p}-\overline{x}_p)\\ .&.&. \\ (x_{n1}-\overline{x}_1)&...&(x_{np}-\overline{x}_p) \end{pmatrix}, \qquad Y_c=Y-\bar{Y}=y-(\frac{\sum^n_{i=1}{y_i}}{n}) \] 此时可以构建一个新的线性关系表达式: \[ y_i - \bar{y} = (\beta_0+\sum^p_{k=1}{\beta_k\cdot\overline{x}_k})+(\sum^p_{l=1}{\beta_l}(x_{il}-\overline{x}_l))+e_i \] 这里注意到括号内部分实际上就是原数据集下的拟合直线经过平移后的常数偏置项,因此可定义新模型为: \[ e'_i=y_i'=\gamma+(x_i'-\mu_x')^\top\theta'+v_i', \quad v'\sim N(0,\sigma'^2I_n), \] 通过最小二乘法求解上述公式可知,在这种情况下斜率不会受到影响,因为协方差阵结构未发生改变,只是位置发生了移动而已。所以对于任意给定的数据集而言,只要进行了适当标准化操作之后再做OLS估计的话,那么最终获得的结果应该是一致性的[^2]。 ```python import numpy as np def ols(X, y): """Ordinary Least Squares estimation.""" beta_hat = np.linalg.inv(X.T @ X) @ X.T @ y return beta_hat # Generate some random data with mean different from zero. np.random.seed(42) N = 100 P = 3 X = np.hstack([np.ones((N, 1)), np.random.randn(N, P)]) true_beta = np.array([[5], [-2], [1], [3]]) noise = np.random.normal(size=N).reshape(-1, 1) y = X @ true_beta + noise # Center the variables except intercept column. centered_X = X.copy() for col in range(1, centered_X.shape[1]): centered_X[:, col] -= centered_X[:, col].mean() print("Original Beta:", ols(X, y)) print("Centered Variables Beta(except Intercept):", ols(centered_X, y)[1:]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值