多元线性回归公式推导及r语言实现(代码片段)

zhiranok zhiranok     2022-12-26     358

关键词:

多元线性回归

多元线性回归模型

实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示。
技术分享图片

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

Y = XW

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

最小二乘法

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

技术分享图片

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

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

简单推导如下:
技术分享图片

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

最小二乘法求解

二次函数是个凸函数,极值点就是最小点。只需要求导数=0解出W即可。
技术分享图片

模拟数据

我们这里用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

体重和身高具有线性关系,我们做一个散点图可以看出来:
技术分享图片

我们用最小二乘推导出来的公式计算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的只是小数点取了两位而已,将回归出来的函数画到图中看下回归的效果。
技术分享图片
画图对应的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

技术分享图片

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

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

r语言多元线性回归研究年龄身高体重的关系(代码片段)

先上代码data<-read.table('e://kg.txt',header=TRUE,sep='\\t')data<-data%>%as_tibble()data%>%attach()data%>%ggplot(aes(cm,kg))+geom_line()data%>%ggplot(aes(age, 查看详情

一元线性回归及案例(python)(代码片段)

...据特征变量的个数可将线性回归模型分为一元线性回归和多元线性回归。例如,通过“工龄”这一个特征变量来预测“薪水”,就属于一元线性回归;而通过“工龄”“行业”“所在城市”等多个特征变量来预测“薪... 查看详情

r语言构建多元线性回归模型

R语言构建多元线性回归模型对比一元线性回归,多元线性回归是用来确定2个或2个以上变量间关系的统计分析方法。多元线性回归的基本的分析方法与一元线性回归方法是类似的,我们首先需要对选取多元数据集并定义数学模型... 查看详情

欢迎来到对抗路——机器学习-多元线性回归模型(详解)(代码片段)

...给你意想不到的惊喜呀🍉文章目录🐲前言🐲多元线性回归模型讲解🐮公式推导🐮案例🐮案例解决代码🐮数据哑变量处理🐮如何判断是否线性相关🐺模型的F检验🐷提出假设🐷构造... 查看详情

r可视化多元线性回归模型

R可视化多元线性回归模型目录R可视化多元线性回归模型一元线性回归建模及可视化 查看详情

线性回归及正则化公式推导

基础公式:?BA/?A=BT?ATB/?A=B?ATBA/?A=2BA模型函数:hθ(x)=xθ无正则化损失函数:J(θ)=1/2(Xθ-Y)2令偏导?J(θ)/?θ等于0,得:θ=(XTX)-1XTY正则化损失函数:J(θ)=1/2(Xθ-Y)2+1/2λθ2令偏导?J(θ)/?θ等于0,得:θ=(XTX+λI)-1XTY  参考文献:https://b... 查看详情

r语言-岭回归及lasso算法(代码片段)

前文我们讲到线性回归建模会有共线性的问题,岭回归和lasso算法都能一定程度上消除共线性问题。岭回归>#########正则化方法消除共线性>###岭回归>###glmnet只能处理矩阵>library(glmnet)>library(mice)>creditcard_exp<-creditcard_... 查看详情

r语言入门——多元回归交叉验证的实现(代码片段)

...模型。基本思想是参与评估的数据不去拟合模型。本文以多元回归 查看详情

r语言入门——多元回归交叉验证的实现(代码片段)

...模型。基本思想是参与评估的数据不去拟合模型。本文以多元回归 查看详情

r语言入门——多元回归交叉验证的实现(代码片段)

...模型。基本思想是参与评估的数据不去拟合模型。本文以多元回归 查看详情

回归分析r语言--多元线性回归

参考技术A多元线性回归是简单线性回归的扩展,用于基于多个不同的预测变量(x)预测结果变量(y)。例如,对于三个预测变量(x),y​​的预测由以下等式表示:y=b0+b1*x1+b2*x2+b3*x3回归贝塔系数测量每个预测变量与结... 查看详情

r语言解读多元线性回归模型

650)this.width=650;"src="http://blog.fens.me/wp-content/uploads/2016/07/reg-multi-liner.png"width="600"height="400"alt="reg-multi-liner.png"/>前言本文接上一篇R语言解读一元线性回归模型。在许多生活和工作的实际问题中,影响因变量的因素可能不止一个,比... 查看详情

多元线性回归模型用r语言怎么来实现

参考技术A)attach(byu)lm(salary~age+exper)lm(salary~.,byu)#利用全部自变量做线性回归lm()只能得出回归系数,要想得到更为详尽的回归信息,应该将结果作为数据保存或者使用“拟合模型”(fittedmodel)result<-lm(salary~age+exper+age*exper,data=b... 查看详情

线性回归

...:   另式1和式2等于0就可以求出w和b 对于多元线性回归,我们可以用最小二乘法 推导过程中用了矩阵求导和矩阵迹的相关知识,这样我们就可以求出参数 查看详情

matlab多元线性回归(代码片段)

1.matlab多元回归示例如下:解决问题:油价预测方法:多元线性回归实现:matlabregress()函数技巧:通过增加X1^2,X2^2,或者X1*X2等构造的特征项,可以提高回归模型的拟合准确度;但计算代价增大。functionresult=reg_new_month(XX1_bu,YYnum)... 查看详情

r语言解读多元线性回归模型

转载:http://blog.fens.me/r-multi-linear-regression/前言本文接上一篇R语言解读一元线性回归模型。在许多生活和工作的实际问题中,影响因变量的因素可能不止一个,比如对于知识水平越高的人,收入水平也越高,这样的一个结论。这... 查看详情

转载:logistic回归原理及公式推导

...g.csdn.NET/acdreamers/article/details/27365941Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素之间关系的一种多变量分析方法。通常的问题是,研究某些因素条件下某个结果是否发生,比如医学中根据病人的一... 查看详情

机器学习基础——推导线性回归公式(代码片段)

...介绍过最小二乘法,所以这期文章我们顺水推舟,来讲讲线性回归模型。线性回归的本质其实是一种统计学当中的回归分析方法,考察的是自变量和因变量之间的线性关联。后来也许是建模的过程和模型训练的方式和机器学习的... 查看详情