[机器学习-回归算法]一元线性回归用最小二乘法的推导过程
一元线性回归用最小二乘法的推导过程
在数据的统计分析中,数据之间即变量x与Y之间的相关性研究非常重要,通过在直角坐标系中做散点图的方式我们会发现很多统计数据近似一条直线,它们之间或者正相关或者负相关。虽然这些数据是离散的,不是连续的,我们无法得到一个确定的描述这种相关性的函数方程,但既然在直角坐标系中数据分布接近一条直线,那么我们就可以通过画直线的方式得到一个近似的描述这种关系的直线方程。当然,从前面的描述中不难看出,所有数据都分布在一条直线附近,因此这样的直线可以画出很多条,而我们希望找出其中的一条,能够最好地反映变量之间的关系。换言之,我们要找出一条直线,使这条直线“最贴近”已知的数据点,设此直线方程为:① y^=a+bx\hat{y} = a + bxy^=a+bx
这里的y^\hat{y}y^是为了区分Y的实际值y(这里的实际值就是统计数据的真实值,我们称之为观察值),当x取值xix_ixi(i=1,2,3……n)时,Y的观察值为yiy_iyi,近似值为y^\hat{y}y^(或者说对应的纵坐标是y^=a+bx\hat{y} = a + bxy^=a+bx)。
其中①式叫做Y对x的回归直线方程,b叫做回归系数。要想确定回归直线方程①,我们只需确定a与回归系数b即可。
设x,Y的一组观察值为:(xi,yi)(x_i, y_i)(xi,yi) i = 1,2,3……n
其回归直线方程为:y^=a+bx\hat{y} = a + bxy^=a+bx
当x取值(i=1,2,3……n)时,Y的观察值为,差刻画了实际观察值与回归直线上相应点纵坐标之间的偏离程度,见下图:
实际上我们希望这n个离差构成的总离差越小越好,只有如此才能使直线最贴近已知点。换句话说,我们求回归直线方程的过程其实就是求离差最小值的过程。
一个很自然的想法是把各个离差加起来作为总离差。可是,由于离差有正有负,直接相加会互相抵消,如此就无法反映这些数据的贴近程度,即这个总离差不能用n个离差之和来表示,见下图:
∑i=1n(yi−yi^)\sum_{i=1}^n (y_i-\hat{y_i}) i=1∑n(yi−yi^)
一般做法是我们用离差的平方和,即:
Q=∑i=1n(yi−yi^)2=∑i=1n(yi−a−bxi)2Q =\sum_{i=1}^n (y_i-\hat{y_i})^2 =\sum_{i=1}^n (y_i-a-bx_i)^2 Q=i=1∑n(yi−yi^)2=i=1∑n(yi−a−bxi)2
作为总离差 ,并使之达到最小。这样回归直线就是所有直线中Q取最小值的那一条。由于平方又叫二乘方,所以这种使“离差平方和为最小”的方法,叫做最小二乘法。
求偏导
Q=∑i=1n(yi−yi^)2=∑i=1n(yi−a−bxi)2∂Q∂a=2∑i=1n[yi−(a+bxi)]∗(−1)=2∑i=1n[a+bxi−yi]=0∂Q∂b=2∑i=1n[yi−(a+bxi)]∗(−xi)=2∑i=1nxi[a+bxi−yi]=0\begin{aligned} Q &=\sum_{i=1}^n (y_i-\hat{y_i})^2 =\sum_{i=1}^n (y_i-a-bx_i)^2 \\ \frac{\partial Q }{\partial a} & = 2\sum_{i=1}^n[y_i-(a+bx_i)] *(-1) =2\sum_{i=1}^n[a+bx_i-y_i] =0\\ \frac{\partial Q }{\partial b} &= 2\sum_{i=1}^n[y_i-(a+bx_i)] *(-x_i) =2\sum_{i=1}^nx_i[a+bx_i-y_i] =0 \end{aligned} Q∂a∂Q∂b∂Q=i=1∑n(yi−yi^)2=i=1∑n(yi−a−bxi)2=2i=1∑n[yi−(a+bxi)]∗(−1)=2i=1∑n[a+bxi−yi]=0=2i=1∑n[yi−(a+bxi)]∗(−xi)=2i=1∑nxi[a+bxi−yi]=0
由第一个偏导式化简的到
∑i=1n[a+bxi−yi]=0∑i=1n(a+bxi−yi)n=0a+bx‾−y‾=0a=y‾−bx‾\begin{aligned} & \sum_{i=1}^n[a+bx_i-y_i] =0 \\ & \frac{\sum_{i=1}^n(a+bx_i-y_i)}{n} = 0 \\ & a+b\overline{x}-\overline{y} = 0 \\ & a = \overline{y} - b \overline{x} \end{aligned} i=1∑n[a+bxi−yi]=0n∑i=1n(a+bxi−yi)=0a+bx−y=0a=y−bx
有第二个偏导式化简的到
∑i=1nxi(a+bxi−yi)=0∑i=1nxi(y‾−bx‾+bxi−yi)=0∑i=1n(xiy‾−b(xix‾+xi2)−xiyi)=0∑i=1n(xiy‾−xiyi)=∑i=1nb(xix‾−xi2)b∑i=1n(xix‾−xi2)=∑i=1n(xiy‾−xiyi)b=∑i=1n(xiy‾−xiyi)∑i=1n(xix‾−xi2)b=∑i=1n(xiyi−xiy‾)∑i=1n(xi2−xix‾)b=∑i=1nxiyi−y‾∑i=1nxi∑i=1nxi2−x‾∑i=1nxib=∑i=1nxiyi−nx‾y‾∑i=1nxi2−nx‾2\begin{aligned} &\sum_{i=1}^nx_i(a+bx_i-y_i)=0 \\ & \sum_{i=1}^nx_i(\overline{y} - b \overline{x}+bx_i-y_i) =0 \\ & \sum_{i=1}^n(x_i\overline{y} - b (x_i\overline{x}+x_i^2)-x_iy_i) =0 \\ & \sum_{i=1}^n(x_i\overline{y} -x_iy_i) =\sum_{i=1}^nb (x_i\overline{x}-x_i^2) \\ & b \sum_{i=1}^n (x_i\overline{x}-x_i^2)=\sum_{i=1}^n( x_i\overline{y} -x_iy_i ) \\ & b = \frac{\sum_{i=1}^n (x_i \overline{y}-x_i y_i) } {\sum_{i=1}^n (x_i\overline{x}-x_i^2 )} \\ & b = \frac{\sum_{i=1}^n (x_i y_i - x_i \overline{y}) } {\sum_{i=1}^n (x_i^2 - x_i\overline{x} ) } \\ & b = \frac{\sum_{i=1}^n x_i y_i - \overline{y} \sum_{i=1}^n x_i } {\sum_{i=1}^n x_i^2 - \overline{x} \sum_{i=1}^nx_i } \\ & b = \frac{\sum_{i=1}^nx_iy_i-n\overline{x} \overline{y}}{\sum_{i=1}^nx_i^2-n\overline{x}^2} \end{aligned} i=1∑nxi(a+bxi−yi)=0i=1∑nxi(y−bx+bxi−yi)=0i=1∑n(xiy−b(xix+xi2)−xiyi)=0i=1∑n(xiy−xiyi)=i=1∑nb(xix−xi2)bi=1∑n(xix−xi2)=i=1∑n(xiy−xiyi)b=∑i=1n(xix−xi2)∑i=1n(xiy−xiyi)b=∑i=1n(xi2−xix)∑i=1n(xiyi−xiy)b=∑i=1nxi2−x∑i=1nxi∑i=1nxiyi−y∑i=1nxib=∑i=1nxi2−nx2∑i=1nxiyi−nxy
由以上两个偏导式化简可得:
(3){b=∑i=1nxiyi−nx‾y‾∑i=1nxi2−nx‾2a=y‾−b^x‾(3)\begin{cases} b =\frac{\sum_{i=1}^nx_iy_i-n\overline{x} \overline{y}}{\sum_{i=1}^nx_i^2-n\overline{x}^2} \\ a =\overline{y}-\hat{b}\overline{x} \end{cases} (3){b=∑i=1nxi2−nx2∑i=1nxiyi−nxya=y−b^x
其中x‾,y‾\overline{x} , \overline{y}x,y为xix_ixi和yiy_iyi的均值,
我们先给出推导过程中用到的两个关键变形公式的推导过程。首先是第一个公式:
接着是第二个公式:
把上面这两个公式(1)(2)代入下面的公式(3)式得:
{b=∑i=1nxiyi−nx‾y‾∑i=1nxi2−nx‾2=∑i=1n(xi−x‾)(yi−y‾)∑i=1n(xi−x‾)2=SxySxxa=y‾−b^x‾\begin{cases} b =\frac{\sum_{i=1}^nx_iy_i-n\overline{x}\overline{y}}{\sum_{i=1}^nx_i^2-n\overline{x}^2}=\frac{\sum_{i=1}^n(x_i-\overline{x})(y_i-\overline{y})}{\sum_{i=1}^n(x_i-\overline{x})^2}= \frac{S_{xy}}{S_{xx}} \\ a =\overline{y}-\hat{b}\overline{x} \end{cases} {b=∑i=1nxi2−nx2∑i=1nxiyi−nxy=∑i=1n(xi−x)2∑i=1n(xi−x)(yi−y)=SxxSxya=y−b^x
其中x‾,y‾\overline{x} , \overline{y}x,y为xix_ixi和yiy_iyi的均值, Sxy=∑i=1n(xi−x‾)(yi−y‾)S_{xy} =\sum_{i=1}^n(x_i-\overline{x})(y_i-\overline{y})Sxy=∑i=1n(xi−x)(yi−y), Sxx=∑i=1n(xi−x‾)2S_{xx} =\sum_{i=1}^n(x_i-\overline{x})^2Sxx=∑i=1n(xi−x)2 。
a、b的上方加“︿”表示是由观察值按最小二乘法求得的估计值,a、b求出后,回归直线方程也就建立起来了。
参考资料
【1】https://blog.csdn.net/R18830287035/article/details/88384396
【2】 https://blog.csdn.net/marsjohn/article/details/54911788
【3】https://www.cnblogs.com/KID-yln/p/12840184.html
[机器学习-回归算法]一元线性回归用最小二乘法的推导过程相关推荐
- 机器学习——回归算法
机器学习–回归算法 一.问题分析 回归问题和分类问题在本质上是一样的,都是针对一个输入做出一个输出预测,其区别在于输出变量的类型. 分类问题也叫离散变量预测,其输出是输入数据所对应的类别,是一种定性输 ...
- 机器学习经典算法之线性回归sklearn实现
机器学习经典算法之线性回归sklearn实现 from sklearn import linear_model from sklearn import datasets import numpy as ...
- MATLAB一元线性回归(最小二乘法)小例子
这里写自定义目录标题 MATLAB一元线性回归(最小二乘法) MATLAB一元线性回归(最小二乘法) y=x+10测试实例 >> help regress regress - 多元线性回归 ...
- 机器学习-回归之一元回归与多元回归算法原理及实战
一元回归分析和多元线性回归 前言 在统计学中,回归分析(Regression Analysis)指的是确定两种或两种以上变量间的相互依赖的定量关系的一种分析方法.该方法常使用数据统计的基本原理,对大量 ...
- Python机器学习--回归算法--线性回归
线性回归算法的类型 有监督学习的回归算法[标签是连续数据类型] 线性回归基础 研究父子身高关系 研究父辈身高(自变量x)如何决定子辈身高(因变量y) 建立方程表征关系:y = kx+b-------- ...
- [机器学习-回归算法]Sklearn之线性回归实战
Sklearn之线性回归实战 一,前言 二,热身例子 三,贸易公司的简单例子 四,Sklearn 官网里的一个例子 五,预测每月的地铁故障数 参考资料 一,前言 一元线性回归的理论片请看我这个链接 二 ...
- Python机器学习--回归算法--线性回归算法
线性回归算法 线性回归算法类型: 线性回归算法属于有监督学习的回归算法,可以处理标签为连续数据类型的数据. 线性回归算法原理: 通过寻找特征和标签之间的关系,生成一个线性方程,通过线性方程预测未知标签 ...
- 机器学习(3) 一元线性回归(最小二乘法实现)
一元线性回归是分析只有一个自变量x 和 因变量y 线性相关关系的方法.一个经济指标的数值往往受许多因素影响,若其中只有一个因素是主要的,起决定性作用,则可用一元线性回归进行预测分析. 一元线性回归分析 ...
- 【机器学习】监督学习--(回归)一元线性回归
注:数据集在文章末尾. (1)梯度下降法 - - 一元线性回归 import numpy as np import matplotlib.pyplot as plt# 载入数据 data = np.g ...
最新文章
- 使用librosa计算pcen
- python调用数据库存储过程_python连接mysql调用存储过程示例
- 使用Goldengate 实现Oracle for Oracle 单向数据同步
- windows环境安装haproxy及初步配置负载均衡使用示例
- CentOS 6安装详解及PXE 安装
- 启动activemq_浅谈ActiveMQ与使用
- BAT大佬给的Python神器,内附资源
- 将博客文章转变为电子书
- 随机生成彩票的shell脚本
- 数据结构java 图实验代码_20172329 2018-2019 《Java软件结构与数据结构》实验三报告...
- Python办公自动化(二)|从Excel到Word
- 队列管理器连接数设置_详解!基于Redis解决业务场景中延迟队列的应用实践,你不得不服啊...
- Linux之vim常用扩展操作
- c语言生成2048位的大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
- C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)
- Qt手动设置Kits套件
- 2018第九届蓝桥杯B组决赛题解第四题 调手表
- 10个优秀的Golang开源库类,武装生产力
- 关于 js 闭包的理解
- FT5316调试记录