多元线性回归

多元线性回归模型

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

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

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

X.T

Y

w

> w

[,1]

[1,] -87.51667

[2,] 3.45000

> lm.result

> 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

Y

maxIterNum

step

W

for (i in 1:maxIterNum){

grad

if (sqrt(as.numeric(t(grad) %*% grad)) < 1e-3){

print(sprintf('iter times=%d', i));

break;

}

W

}

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

Y

maxIterNum

step

W

for (i in 1:maxIterNum){

grad

if (sqrt(as.numeric(t(grad) %*% grad)) < 1e-6){

print(sprintf('iter times=%d', i));

break;

}

W

}

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

logistic逻辑回归公式推导及R语言实现

Logistic逻辑回归 Logistic逻辑回归模型 线性回归模型简单,对于一些线性可分的场景还是简单易用的.Logistic逻辑回归也可以看成线性回归的变种,虽然名字带回归二字但实际上他主要用来二 ...

机器学习-线性回归(基于R语言)

基本概念 利用线性的方法,模拟因变量与一个或多个自变量之间的关系.自变量是模型输入值,因变量是模型基于自变量的输出值. 因变量是自变量线性叠加和的结果. 线性回归模型背后的逻辑——最小二乘法计算线性系 ...

R语言与概率统计&lpar;二&rpar; 假设检验

> ####################5.2 > X

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

转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止 ...

R 语言中的多元线性回归

示例 sessionInfo() # 查询版本及系统和库等信息 # 工作目录设置 getwd() path

【R】多元线性回归

R中的线性回归函数比较简单,就是lm(),比较复杂的是对线性模型的诊断和调整.这里结合Statistical Learning和杜克大学的Data Analysis and Statistical I ...

R语言解读一元线性回归模型

转载自:http://blog.fens.me/r-linear-regression/ 前言 在我们的日常生活中,存在大量的具有相关性的事件,比如大气压和海拔高度,海拔越高大气压强越小:人的身高和体 ...

机器学习(一) 从一个R语言案例学线性回归

写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等.但既然本文名为,那就更重视如何使用R语言去解决线 ...

【数据分析】线性回归与逻辑回归(R语言实现)

文章来源:公众号-智能化IT系统. 回归模型有多种,一般在数据分析中用的比较常用的有线性回归和逻辑回归.其描述的是一组因变量和自变量之间的关系,通过特定的方程来模拟.这么做的目的也是为了预测,但有时也 ...

随机推荐

在LaTeX文档中插入图片的几种常用的方法

LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文件. 在LaTeX文档中插入图片 ...

android离线安装adt

打开Eclipse, 在菜单栏上选择help->Install New SoftWare 出现如下界面: 点击 Add按钮,出现如下界面 在Name这而随意输入一个名字:ADT15:点击打开Ar ...

【HDU】4923 Room and Moor&lpar;2014多校第六场1003&rpar;

Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

XX秘籍

第一课 一个男人在他妻子洗完澡后准备进浴室洗澡.这时,门铃响了. 妻子迅速用浴巾裹住自己冲到门口. 当她打开门时,邻居鲍勃站在那儿. 在她开口前,鲍勃说,“你如果把浴巾拿掉,我给你800美元.” 想了 ...

浅谈this那些事

一直以来,对this的讨论都是热门话题.有人说掌握了this就掌握了JavaScript的80%,说法有点夸张,但可见this的重要性.本人至今也是记录了很多关于this的零碎笔记,今天就来个小结. ...

Ionic APP-Web SPA开发进阶&lpar;二&rpar;Ionic进阶之路由去哪了

Ionic进阶之路由去哪了 项目需求 在查看药品时,从药品列表中可以通过点击药品列表获取某一药品详情.提交订单时,同样可以查看药品详情.两种情形下,从药品详情返回后,应分别返回至原来的页面.如下图所示 ...

HTML&plus;Css让网页自动适应电脑手机屏幕

Word Ladder&lpar;双向BFS&rpar;

2018-10-02 23:46:38 问题描述: 问题求解: 显然是个解空间遍历问题,每次修改其中一位,由于步长是1,所以可以使用BFS进行解空间的遍历.

天梯赛2016-L2

L2-001. 紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在 ...

多元线性回归分析c语言,多元线性回归公式推导及R语言实现相关推荐

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

    多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示. 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W ...

  2. 多元线性回归分析(R语言)

    ▼多元线性回归分析▼ 一.多元线性回归模型 设变量Y与X1,X2,--,Xp之间有线性关系 其中    , 和  是未知参数,p≥2,称上公式为多元线性回归模型. 二.参数估计 我们根据多元线性回归模 ...

  3. 多元线性回归分析预测法概述

    在市场的经济活动中,经常会遇到某一市场现象的发展和变化取决于几个影响因素的情况,也就是一个因变量和几个自变量有依存关系的情况.而且有时几个影响因素主次难以区分,或者有的因素虽属次要,但也不能略去其作用 ...

  4. R语言计量(一):一元线性回归与多元线性回归分析

    文章目录 一.数据调用与预处理 二.一元线性回归分析 三.多元线性回归分析 (一)解释变量的多重共线性检测 (二)多元回归 1. 多元最小二乘回归 2. 逐步回归 (三)回归诊断 四.模型评价-常用的 ...

  5. 多元线性回归matlab代码_医学统计|多元线性回归分析

    回归分析的定义:回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法.运用十分广泛.其表达形式为y = w'x+e,e为误差服从均值为0的正态分布.回归分析中,只包括一个自变量和一个 ...

  6. python多元线性回归实例_关于多元线性回归分析——PythonSPSS

    原始数据在这里 1.观察数据 首先,用Pandas打开数据,并进行观察. import numpy import pandas as pd import matplotlib.pyplot as pl ...

  7. 数学建模-7.多元线性回归分析

    多元线性回归分析 回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想解决 回归分析的任务:通过研究自变量X和因变量Y的相关关系(注意相关性≠因果性),尝试解释 ...

  8. 数学建模暑期集训6:用SPSS对数据进行多元线性回归分析

    在本专栏的第六篇数学建模学习笔记(六)多元回归分析算法(matlab)博文中,记录了如何用matlab进行多元回归分析.本篇则将使用spss软件达到同样的效果,且使用起来比matlab更为方便. 空谈 ...

  9. 5.1 多元线性回归分析

    在本章中,我们将从线性回归模型开始,它是最简单的模型之一. 数据集来自于UIC数据集中的能效数据集,该数据及用来分析建筑的供热负荷能效和制冷负荷能效,其中自变量有8个,因变量有两个,实例主要分析8个自 ...

最新文章

  1. GitHub开源城市结构公交路线数据可视化
  2. 打造无所不及的智能:徐直军发布华为AI战略及全栈全场景方案
  3. git本地仓库关联远端仓库
  4. 软件开发基本原则(一)—— 策略和因素 (转)
  5. Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询
  6. 【Mac】Mac 下安装MySQL优化工具mysqltuner执行报错 [!!] Attempted to use login credentials
  7. Leecode刷题热题HOT100(14)——最长公共前缀
  8. 201403-1-相反数
  9. UIProgressView的详细使用
  10. 韦东山驱动视频笔记——6.输入子系统之编写驱动程序
  11. 行政区域村级划分数据库_两区划定数据库规范标准
  12. visio 去除“讨厌”的自动捕捉
  13. 代码要写注释吗?写你就输了
  14. 电子设计教程48:流水灯电路-完整电路设计
  15. Python批量更改txt文本每行数据
  16. 【python10个小实验】1. 画一个简单的三角形
  17. Max-Margin Regularization for Chamfer Matching
  18. 一个屌丝程序猿的人生(三十八)
  19. 【Unity3D 灵巧小知识点】 ☀️ | 求解 两个向量的夹角度数
  20. cat全链路监控_CAT分布式监控系统(一):CAT功能介绍 CAT监控系统是什么、能做什么?...

热门文章

  1. 分数阶傅里叶变换(FrFT)详细原理与matlab代码实现
  2. 为了梦想而奋斗的人值得敬佩
  3. anacnda和pycharm的一些配置上的事情
  4. UR机器人装箱姿态_ur机器人坐标系说明来了,感兴趣的朋友可以看看
  5. 简单的md5加密数据及密码复杂度校验
  6. CleanMyMac多功能mac电脑管家清理软件
  7. 寒从足下起 冬季防病先护足
  8. sd卡烧写linux内核,uboot从SD卡烧写内核和文件系统
  9. CVE-2020-5135:SonicOS缓冲区溢出漏洞通告
  10. STM32L0系列之ADC采集