多元线性回归公式推导及R语言实现

博客围绕多元线性回归展开,介绍了其模型及矩阵形式,阐述了求解自变量系数W的最小二乘法,包括残差平方和及最大似然推导。用R语言对women数据进行模拟实践,还提及梯度下降法求W,指出未归一化时收敛慢,归一化后收敛速度大幅提升。

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

多元线性回归

多元线性回归模型

实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示。
282357-20180812104552018-1155558715.png

为了方便计算,我们将上式写成矩阵形式:

Y = XW

  • 假设自变量维度为N
  • W为自变量的系数,下标0 - N
  • X为自变量向量或矩阵,X维度为N,为了能和W0对应,X需要在第一行插入一个全是1的列。
  • Y为因变量
    那么问题就转变成,已知样本X矩阵以及对应的因变量Y的值,求出满足方程的W,一般不存在一个W是整个样本都能满足方程,毕竟现实中的样本有很多噪声。最一般的求解W的方式是最小二乘法。

最小二乘法

我们希望求出的W是最接近线性方程的解的,最接近我们定义为残差平方和最小,残差的公式和残差平方和的公式如下:

282357-20180812104621648-1260933428.png

上面的公式用最小残差平方和的方式导出的,还有一种思路用最大似然的方式也能推导出和这个一样的公式,首先对模型进行一些假设:

  • 误差等方差不相干假设,即每个样本的误差期望为0,每个样本的误差方差都为相同值假设为σ
  • 误差密度函数为正态分布 e ~ N(0, σ^2)

简单推导如下:
282357-20180812104635827-1160637046.png

由此利用最大似然原理导出了和最小二乘一样的公式。

最小二乘法求解

二次函数是个凸函数,极值点就是最小点。只需要求导数=0解出W即可。
282357-20180823101512671-426252816.jpg

模拟数据

我们这里用R语言模拟实践一下,由于我们使用的矩阵运算,这个公式一元和多元都是兼容的,我们为了可视化方便一点,我们就用R语言自带的women数据做一元线性回归,和多元线性回归的方式基本一样。
women数据如下

> women
   height weight
1      58    115
2      59    117
3      60    120
4      61    123
5      62    126
6      63    129
7      64    132
8      65    135
9      66    139
10     67    142
11     68    146
12     69    150
13     70    154
14     71    159
15     72    164

体重和身高具有线性关系,我们做一个散点图可以看出来:
282357-20180812104651524-1024697287.png

我们用最小二乘推导出来的公式计算w如下

X <- cbind(rep(1, nrow(women)), women$height)
X.T <- t(X)
w <- solve(X.T %*% X) %*% X.T %*% y
> w
          [,1]
[1,] -87.51667
[2,]   3.45000
> lm.result <- lm(women$weight~women$height)
> lm.result

Call:
lm(formula = women$weight ~ women$height)

Coefficients:
 (Intercept)  women$height  
      -87.52          3.45

上面的R代码w使我们利用公式计算出来的,下边是R语言集成的线性回归函数拟合出来的,可以看出我们的计算结果是正确的,lm的只是小数点取了两位而已,将回归出来的函数画到图中看下回归的效果。
282357-20180812104705496-67150394.png
画图对应的R代码如下,用R的感觉.....太飘逸了。

> png(file="chart2.png")
> plot(women$height, women$weight)
> lines(women$height, X %*% w)
> dev.off()

梯度下降法

除了用正规方程方式求解W,也可以用最常见的梯度下降法求得W,因为最小二乘是个凸函数,所以这里找到的极小点就是最小点。下面这段代码用R写还是非常容易的,但是刚开始step步长参数调的太大了,导致一直不收敛,我还
以为是程序错误,后来怎么看也没写错,就把参数调了个很小值,结果就收敛了。step的这个取值其实应该是变化的,先大后下比较科学,我这个调的很小,需要接近500万次才能收敛。

  • 初始化W 为全0向量,也可以随机一个向量
  • 设置最大迭代次数,本例为了收敛设置了一个很大的数
  • 设置步长step,小了收敛很慢,大了不收敛.......
  • 求损失函数的梯度
  • W(k+1) 为 W(k) + 损失函数负梯度 * 步长step
  • 循环,直到梯度接近0

282357-20180823101526678-255938302.jpg

X <- cbind(rep(1, nrow(women)), women$height)
Y <- women$weight
maxIterNum <- 5000000;
step <- 0.00003;
W <- rep(0, ncol(X))
for (i in 1:maxIterNum){
    grad <- t(X) %*% (X %*% W -  Y);
    if (sqrt(as.numeric(t(grad) %*% grad)) < 1e-3){
        print(sprintf('iter times=%d', i));
        break;
    }
    W <- W - grad * step;
}
print(W);

输出

[1] "iter times=4376771"

print(W);
[,1]
[1,] -87.501509
[2,] 3.449768

归一化

上面的批量梯度下降为什么收敛如此之慢呢?原因很简单,没有做归一化,做了归一化,收敛速度快了非常非常多!!!!
正确代码如下:

XScale = scale(women$height)
Ux = attr(XScale, "scaled:center")
Dx = attr(XScale, "scaled:scale")
YScale = scale(women$weight)
Uy = attr(YScale, "scaled:center")
Dy = attr(YScale, "scaled:scale")
X <- cbind(rep(1, nrow(women)), as.matrix(XScale))
Y <- as.matrix(YScale)
maxIterNum <- 5000;
step <- 0.001;
W <- rep(0, ncol(X))
for (i in 1:maxIterNum){
    grad <- t(X) %*% (X %*% W -  Y);
    if (sqrt(as.numeric(t(grad) %*% grad)) < 1e-6){
        print(sprintf('iter times=%d', i));
        break;
    }
    W <- W - grad * step;
}
print(W);
W0 = W[1]
Wn = W[2:length(W)]
Wn = Dy * Wn / Dx
W0 = Uy + Dy * W0 - Dy * Ux / Dx
W  = c(W0, Wn)
print(W);

输出

[1] "iter times=1168"

print(W);
-88.53154 3.45000

更多精彩文章 http://h2cloud.org/

<think>首先,用户的问题是:“我想查找多元线性回归公式请问多元线性回归公式数学表达”。我需要提供多元线性回归的数学公式表达。根据系统级指令:-所有行内数学表达式必须使用`$...$`格式。-独立公式必须使用`$$...$$`格式并单独成段。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾自然地添加引用标识,如`[^1]`。-结构清晰,帮助用户逐步解决问题,保证回答真实可靠。参考站内引用:-引用[1]:提到线性回归、广义线性回归等。-引用[2]:来自西瓜书,关于多元线性回归公式推导。-引用[3]:详细推导多元线性回归公式,包括矩阵表示。用户的问题直接要求多元线性回归公式,所以我应该先给出公式,然后解释它。多元线性回归公式:-一般形式:对于一个有d个特征的样本,多元线性回归模型是:$$y=\beta_0+\beta_1x_1+\beta_2x_2+\dots+\beta_dx_d+\epsilon$$其中:-$y$是因变量,-$x_1,x_2,\dots,x_d$是自变量,-$\beta_0$是截距,-$\beta_1,\beta_2,\dots,\beta_d$是系数,-$\epsilon$是误差项。在矩阵形式中,更常见:-假设有m个样本,每个样本有d个特征。-设计矩阵$X$是m×(d+1)矩阵,包括一列1用于截距。-系数向量$\beta$是(d+1)×1向量。-响应向量$y$是m×1向量。-模型:$y=X\beta+\epsilon$-最小二乘估计:$\hat{\beta}=(X^TX)^{-1}X^Ty$从引用[3]中:“多元线性回归超详细详解”,它提到了:-权值向量$\hat{w}=(w;b)$或$w^=[w_1,w_2,\dots,w_d,b]$-输入矩阵X,其中每行是一个样本,前d个元素是属性值,最后一个元素是1。所以,我应该使用矩阵形式来表示公式。步骤:1.**介绍多元线性回归**:简要解释是什么。2.**给出公式**:使用独立公式格式。3.**解释符号**:确保清晰。4.**引用来源**:自然地添加引用标识。例如,基于引用[2]和[3]。5.**生成相关问题**:在回答结束后,添加相关问题部分。回答结构:-先回答用户的问题。-然后生成相关问题。使用中文:-整个回答用中文。生成相关问题:-类似示例,如“快速排序”后的相关问题。-例如:1.多元线性回归的假设是什么?2.如何计算多元线性回归的系数?3.多元线性回归有哪些应用?确保真实可靠:基于标准统计知识。完整回答:-开头:直接回应问题。-主体:给出公式和简要解释。-结束:添加相关问题。</think>### 多元线性回归公式的数学表达 多元线性回归是一种统计方法,用于建模因变量(目标变量)多个自变量(特征)之间的线性关系。它扩展了简单线性回归,允许使用多个预测变量。下面我将逐步解释其数学表达,确保公式使用正确的 LaTeX 格式(行内公式用 `$...$`,独立公式用 `$$...$$`)。 #### 1. **基本模型形式** 多元线性回归的模型可以表示为: $$ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p + \epsilon $$ 其中: - $y$ 是因变量(需要预测的值), - $x_1, x_2, \dots, x_p$ 是自变量(特征), - $\beta_0$ 是截距项(常数项), - $\beta_1, \beta_2, \dots, \beta_p$ 是回归系数(表示每个自变量对因变量的影响), - $\epsilon$ 是随机误差项(通常假设服从正态分布 $N(0, \sigma^2)$)。 这个公式描述了每个样本的预测关系。但在实际应用中,我们通常处理多个样本,因此矩阵形式更常用[^2]。 #### 2. **矩阵形式(推荐用于计算)** 当有 $m$ 个样本(观测值)和 $p$ 个自变量时,多元线性回归可以用矩阵表示,这简化了计算: $$ \mathbf{y} = \mathbf{X} \boldsymbol{\beta} + \boldsymbol{\epsilon} $$ 其中: - $\mathbf{y}$ 是 $m \times 1$ 的因变量向量: $\mathbf{y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix}$, - $\mathbf{X}$ 是 $m \times (p+1)$ 的设计矩阵(包含自变量和一列1用于截距): $\mathbf{X} = \begin{bmatrix} 1 & x_{11} & x_{12} & \dots & x_{1p} \\ 1 & x_{21} & x_{22} & \dots & x_{2p} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{m1} & x_{m2} & \dots & x_{mp} \end{bmatrix}$, - $\boldsymbol{\beta}$ 是 $(p+1) \times 1$ 的系数向量: $\boldsymbol{\beta} = \begin{bmatrix} \beta_0 \\ \beta_1 \\ \beta_2 \\ \vdots \\ \beta_p \end{bmatrix}$, - $\boldsymbol{\epsilon}$ 是 $m \times 1$ 的误差向量: $\boldsymbol{\epsilon} = \begin{bmatrix} \epsilon_1 \\ \epsilon_2 \\ \vdots \\ \epsilon_m \end{bmatrix}$。 为了估计系数 $\boldsymbol{\beta}$,通常使用最小二乘法,目标是最小化残差平方和(RSS)。系数的最优解为: $$ \hat{\boldsymbol{\beta}} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} $$ 其中 $\hat{\boldsymbol{\beta}}$ 是估计的系数向量。这个公式要求 $\mathbf{X}^T \mathbf{X}$ 可逆(即自变量间无完全共线性)[^3]。 #### 3. **关键解释** - **为什么用矩阵形式?** 矩阵表示法便于编程实现(如 Python 或 R),并能高效处理大数据集。 - **误差项 $\epsilon$**:代表模型未捕获的随机变异,其方差 $\sigma^2$ 反映了模型的精度。 - **系数解释**:每个 $\beta_j$ 表示在其他自变量固定时,$x_j$ 每增加一单位,$y$ 的平均变化量。 多元线性回归的核心假设包括线性关系、误差独立同分布、无多重共线性和同方差性。在实际使用中,可以通过正规方程(如上)或梯度下降等优化方法来求解系数[^1][^3]。 如果您有具体数据集或实现问题,我可以进一步指导代码示例(如 Python 实现)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值