【数学基础】最小二乘法
【fishing-pan:https://blog.csdn.net/u013921430 转载请注明出处】
前言
当我们有NNN组数据,希望能够用一个函数来拟合这组数据的分布情况时,首先想到的就是最小二乘法。最小二乘法是线性回归中最基础也是最常用模型,它也可以用来拟合高次多项式。
什么是最小二乘法
那么,什么是最小二乘法呢?将我们手中已有的数据表示成一个集合,(为了简化模型,暂且只考虑输入属性只有xxx一个的情况)D={(x1;y1),(x2;y2),⋯ ,(xn;yn)}D=\left \{ (x_{1};y_{1}),(x_{2};y_{2}),\cdots ,(x_{n};y_{n}) \right \}D={(x1;y1),(x2;y2),⋯,(xn;yn)}
首先假设最终得到的线性模型为;
y=ax+by=ax+by=ax+b
如上图所示,绿色的线条为所求的回归模型,黑色点为实际样本输入数据,红色线段为实际值与模型预测值之间的欧氏距离,用以下公式表示;
ei=∥axi+b−yi∥e_{i}=\left \| ax_{i}+b-y_{i} \right \|ei=∥axi+b−yi∥
为了让最终所求的模型尽量准确地表现数据分布规律,我们需要让eie_{i}ei的和尽可能的小,所以(a∗,b∗)(a^{*},b^{*})(a∗,b∗)在eie_{i}ei的和取最小值时取得;
(a∗,b∗)=argmin(a,b)∑i=1n∥axi+b−yi∥(a^{*},b^{*})=\underset{(a,b)}{argmin}\sum_{i=1}^{n}\left \| ax_{i}+b-y_{i} \right \|(a∗,b∗)=(a,b)argmini=1∑n∥axi+b−yi∥
但是上述式子中的绝对值是不可导的,求解困难。因此采用均方误差来代替绝对值。
(a∗,b∗)=argmin(a,b)∑i=1n(axi+b−yi)2(a^{*},b^{*})=\underset{(a,b)}{argmin}\sum_{i=1}^{n} (ax_{i}+b-y_{i} )^{2}(a∗,b∗)=(a,b)argmini=1∑n(axi+b−yi)2
这种基于均方误差来进行模型求解的方法就叫最小二乘法,也叫最小平方法。
参数推导
首先还是来看上面提到的最简单的情况。令;
E(a,b)=∑i=1n(axi+b−yi)2E(a,b)=\sum_{i=1}^{n} (ax_{i}+b-y_{i} )^{2}E(a,b)=i=1∑n(axi+b−yi)2
EEE是关于aaa与bbb的二次函数,只会有一个极值点。而很明显,让EEE取极大值的(a,b)(a,b)(a,b)出现在空间中无限远处的,是不存在的。所以当(a,b)(a,b)(a,b)让EEE取得极值时,EEE取得极小值,分别对aaa、bbb求偏导。
∂E∂a=2∑i=1n(axi+b−yi)xi=2(∑i=1naxi2+∑i=1nbxi−∑i=1nyixi)=2(∑i=1naxi2+b∗nxˉ−∑i=1nyixi)\begin{aligned} \frac{\partial E}{\partial a}&=2\sum_{i=1}^{n} (ax_{i}+b-y_{i} )x_{i}\\ &=2(\sum_{i=1}^{n} ax_{i}^{2}+\sum_{i=1}^{n}bx_{i}-\sum_{i=1}^{n}y_{i}x_{i})\\&=2(\sum_{i=1}^{n} ax_{i}^{2}+b*n\bar{x}-\sum_{i=1}^{n}y_{i}x_{i}) \end{aligned} ∂a∂E=2i=1∑n(axi+b−yi)xi=2(i=1∑naxi2+i=1∑nbxi−i=1∑nyixi)=2(i=1∑naxi2+b∗nxˉ−i=1∑nyixi)
∂E∂b=2∑i=1n(axi+b−yi)=2(a∗nxˉ+nb−nyˉ)\frac{\partial E}{\partial b}=2\sum_{i=1}^{n} (ax_{i}+b-y_{i} )=2(a*n\bar{x}+nb-n\bar{y}) ∂b∂E=2i=1∑n(axi+b−yi)=2(a∗nxˉ+nb−nyˉ)
令;
∂E∂a=0,∂E∂b=0\frac{\partial E}{\partial a}=0,\frac{\partial E}{\partial b}=0∂a∂E=0,∂b∂E=0
可得;
a=∑i=1nxiyi−nxˉyˉ∑i=1nxi2−nxˉ2a=\frac{\sum_{i=1}^{n}x_{i}y_{i}-n\bar{x}\bar{y}}{\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2}}a=∑i=1nxi2−nxˉ2∑i=1nxiyi−nxˉyˉ
b=yˉ−axˉ=yˉ∑i=1nxi2−xˉ∑i=1nxiyi∑i=1nxi2−nxˉ2b=\bar{y}-a\bar{x}=\frac{\bar{y}\sum_{i=1}^{n}x_{i}^{2}-\bar{x}\sum_{i=1}^{n}x_{i}y_{i}}{\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2}} b=yˉ−axˉ=∑i=1nxi2−nxˉ2yˉ∑i=1nxi2−xˉ∑i=1nxiyi
由于,
∑i=1n(xi−xˉ)(yi−yˉ)=∑i=1n(xiyi−xiyˉ−yixˉ+xˉyˉ)=∑i=1nxiyi−yˉ∑i=1nxi−xˉ∑i=1nyi+nxˉyˉ=∑i=1nxiyi−nxˉyˉ\begin{aligned} \sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})&=\sum_{i=1}^{n}(x_{i}y_{i}-x_{i}\bar{y}-y_{i}\bar{x}+\bar{x}\bar{y})\\ &=\sum_{i=1}^{n}x_{i}y_{i}-\bar{y}\sum_{i=1}^{n}x_{i}-\bar{x}\sum_{i=1}^{n}y_{i}+n\bar{x}\bar{y}\\ &=\sum_{i=1}^{n}x_{i}y_{i}-n\bar{x}\bar{y} \end{aligned} i=1∑n(xi−xˉ)(yi−yˉ)=i=1∑n(xiyi−xiyˉ−yixˉ+xˉyˉ)=i=1∑nxiyi−yˉi=1∑nxi−xˉi=1∑nyi+nxˉyˉ=i=1∑nxiyi−nxˉyˉ
同理,
∑i=1n(xi−xˉ)2=∑i=1nxi2−nxˉ2\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}=\sum_{i=1}^{n}x_{i}^{2}-n\bar{x}^{2} i=1∑n(xi−xˉ)2=i=1∑nxi2−nxˉ2
所以aaa还可以表示成,
a=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2a=\frac{\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})}{\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}} a=∑i=1n(xi−xˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
多元线性回归
上述的推导中输入属性数目为一,在一般的情况下,样本的属性会有多个,所以通过矩阵的形式将上述推导过程进行推广。假设数据集DDD中样本属性有ddd个;将第iii个样本可以表示成以下形式;
(xi1;xi2;⋯ ;xid;y)(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d};y)(xi1;xi2;⋯;xid;y)
用向量 xi{\textbf{x}}_{i}xi表示 ddd 个属性,w{\textbf{w}}w表示参数的向量;
xi=(xi1;xi2;⋯ ;xid){\textbf{x}}_{i}=(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d})xi=(xi1;xi2;⋯;xid)
w=(w1;w2;⋯ ;wd){\textbf{w}}=(w_{1};w_{2};\cdots ;w_{d})w=(w1;w2;⋯;wd)
则回归模型可以表示成;
f(xi)=wTxi+bf({\textbf{x}}_{i})={\textbf{w}}^{T}{\textbf{x}}_{i}+bf(xi)=wTxi+b
为了便于讨论,令
w^=(w;b)\hat{\textbf{w}}=({\textbf{w}};b)w^=(w;b)
对应的将x{\textbf{x}}x也增加一项;
xi=(xi1;xi2;⋯ ;xid;1){\textbf{x}}_{i}=(x_{i}^{1};x_{i}^{2};\cdots ;x_{i}^{d};1)xi=(xi1;xi2;⋯;xid;1)
f(xi)=w^Txif({\textbf{x}}_{i})=\hat{\textbf{w}}^{T}{\textbf{x}}_{i}f(xi)=w^Txi
X=(x11x12⋯x1d1x21x22⋯x2d1⋮⋱⋱⋮⋮xn1xn2⋯xnd1)=(x1T1x2T1⋮⋮xnT1){\textbf{X}}=\begin{pmatrix} x_{1}^{1} & x_{1}^{2} & \cdots & x_{1}^{d} &1 \\ x_{2}^{1} & x_{2}^{2} & \cdots & x_{2}^{d} &1\\ \vdots & \ddots & \ddots &\vdots & \vdots \\ x_{n}^{1} & x_{n}^{2} & \cdots & x_{n}^{d} &1 \end{pmatrix}=\begin{pmatrix} {\textbf{x}}_{1}^{T} &1 \\ {\textbf{x}}_{2}^{T} &1 \\ \vdots &\vdots \\ {\textbf{x}}_{n}^{T} & 1 \end{pmatrix}X=⎝⎜⎜⎜⎛x11x21⋮xn1x12x22⋱xn2⋯⋯⋱⋯x1dx2d⋮xnd11⋮1⎠⎟⎟⎟⎞=⎝⎜⎜⎜⎛x1Tx2T⋮xnT11⋮1⎠⎟⎟⎟⎞
同样地; y=(y1;y2;⋯ ;yn){\textbf{y}}=({y}_{1};{y}_{2};\cdots;{y}_{n})y=(y1;y2;⋯;yn),那么与上面的类似,有;
w^∗=arg minw^(y−Xw^)T(y−Xw^)\hat{\textbf{w}}^{*}=\underset{\hat{\textbf{w}}}{arg\, min}({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})^{T}({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})w^∗=w^argmin(y−Xw^)T(y−Xw^)
令E=(y−Xw^)T(y−Xw^)E=({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})^{T}({\textbf{y}}-{\textbf{X}}\hat{\textbf{w}})E=(y−Xw^)T(y−Xw^);对w^\hat{\textbf{w}}w^求偏导数;
∂E∂w^=2XT(Xw^−y)\frac{\partial E}{\partial \hat{\textbf{w}}}=2{\textbf{X}}^{T}({\textbf{X}}\hat{\textbf{w}}-\textbf{y})∂w^∂E=2XT(Xw^−y)
最终所求
w^∗=(XTX)−1XTy\hat{\textbf{w}}^{*}=({\textbf{X}}^{T}{\textbf{X}})^{-1}{\textbf{X}}^{T}\textbf{y}w^∗=(XTX)−1XTy
继续推广延伸
更一般的,可以将这种线性回归用于非线性函数的拟合;例如对于对数函数;
f(xi)=y=ln(wTxi+b)f({\textbf{x}}_{i})=y=ln({\textbf{w}}^{T}{\textbf{x}}_{i}+b)f(xi)=y=ln(wTxi+b)
可以利用反函数,将其转换成h=ey=wTxi+bh=e^{y}={\textbf{w}}^{T}{\textbf{x}}_{i}+bh=ey=wTxi+b;成为一个线性回归的问题,最终再转换成对数形式;
甚至可以用最小二乘法拟合多项式曲线。
y=a0+a1x+a2x2+⋯+amxmy=a_{0}+a_{1}x+a_{2}x^{2}+\cdots +a_{m}x^{m}y=a0+a1x+a2x2+⋯+amxm
X=(x1mx1m−1⋯x111x2mx2m−1⋯x211⋮⋱⋱⋮⋮xnmxnm−1⋯xn11){\textbf{X}}=\begin{pmatrix} x_{1}^{m} & x_{1}^{m-1} & \cdots & x_{1}^{1} &1 \\ x_{2}^{m} & x_{2}^{m-1} & \cdots & x_{2}^{1} &1\\ \vdots & \ddots & \ddots &\vdots & \vdots \\ x_{n}^{m} & x_{n}^{m-1} & \cdots & x_{n}^{1} &1 \end{pmatrix}X=⎝⎜⎜⎜⎛x1mx2m⋮xnmx1m−1x2m−1⋱xnm−1⋯⋯⋱⋯x11x21⋮xn111⋮1⎠⎟⎟⎟⎞
此时上标mmm不再表示第mmm个属性,而是表示mmm次幂;在修改过X{\textbf{X}}X后,最终w^∗\hat{\textbf{w}}^{*}w^∗依然表示为;
w^∗=(XTX)−1XTy\hat{\textbf{w}}^{*}=({\textbf{X}}^{T}{\textbf{X}})^{-1}{\textbf{X}}^{T}\textbf{y}w^∗=(XTX)−1XTy
Matlab 实现高次多项式拟合
用Matlab实现了最小二乘法一元高次多项式拟合;代码如下;
**%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%不用先生,2018.11.22,最小二乘法一元高次多项式拟合
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
xi=[-1,0,2,3,4,5,8,9,10,15,20];
yi=[-2,-0.5,1.5,2.8,2.8,3.9,7.6,7.5,8,13,16.5];[~,n]=size(xi);
m=8; %%最高8次多项式;
W=zeros(m+1,m);for i=1:mX=zeros(n,i+1); %%创建一个n*+1的矩阵;for j=1:nfor s=1:i X(j,s)=xi(j)^(i+1-s); %%计算矩阵中每一个元素的值endX(j,i+1)=1;endXX=inv(X'*X)*X'*yi'; %%得到系数并赋值for j=1:i+1W(j,i)=XX(j);end
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%构造方程,画图
x=-5:0.01:25;
for i=1:my=W(1,i)*x.^i;for j=2:i+1y=y+W(j,i)*x.^(i-j+1);end subplot(2,4,i);plot(xi,yi,'*');hold on;plot(x,y);hold off
end
suptitle('用1到8次多项式拟合')
**
很明显,在高次多项式拟合时,曲线边缘出现了龙格现象。
参考
《机器学习》,周志华 著,清华大学出版社;
已完。。
【数学基础】最小二乘法相关推荐
- 数学基础(一)——最小二乘法
最小二乘法(LS 算法) 是统计分析中最常用的逼近计算的一种算法,其交替计算结果使得最终结果尽可能地逼近真实结果. LS 算法是一种数学优化技术,也是一种机器学习常用算法.它通过最小化误差的平方和寻找 ...
- 数学基础知识总结 —— 13. 什么是回归分析常用的「最小二乘法」
文章目录 「最小二乘法」的提出背景 从一个简单的例子开始 参考资料 「最小二乘法」的提出背景 最小二乘法通常归功于高斯(Carl Friedrich Gauss,1795),但最小二乘法是由阿德里安- ...
- matlab 最小一乘法,MATLAB实现最小二乘法
转载自: https://blog.csdn.net/zengxiantao1994/article/details/70210662 文章仅为创作者的观点,可与转载者讨论 最小二乘法 最小二乘法(又 ...
- 斯坦福大学CS229数学基础(线性代数、概率论)中文翻译版.pdf
本文是斯坦福大学CS 229机器学习课程的基础材料的中文翻译,个人认为是目前最好的人工智能的数学基础材料. Stanford cs229 manchine learning课程,是斯坦福大学近十年来最 ...
- 【数学基础】算法工程师必备的机器学习--线性模型(上)
作者:华校专 作者信息: 华校专,曾任阿里巴巴资深算法工程师.智易科技首席算法研究员,现任腾讯高级研究员,<Python 大战机器学习>的作者. 编者按: 算法工程师必备系列更新啦!继上次 ...
- 【数学基础】正态分布为什么如此常见?
文章目录: 1 生活中的正态分布 2 名字由来 3 剖析细节 4 有偏分布 每个人都相信它(正态分布):实验工作者认为它是一个数学定理,数学研究者认为它是一个经验公式.----加布里埃尔·李普曼 本 ...
- 首发:吴恩达的 CS229的数学基础(线性代数),有人把它做成了在线翻译版本!...
本文是斯坦福大学 CS 229 机器学习课程的基础材料,是斯坦福各大人工智能课程的数学基础,本文为线性代数部分,原始文件下载[1] 原文作者:Zico Kolter,修改:Chuong Do, Ten ...
- 斯坦福CS229机器学习课程的数学基础(概率论)翻译完成
Stanford cs229 manchine learning课程,相比于Coursera中的机器学习有更多的数学要求和公式的推导,课程全英文,基础材料部分还没有翻译.这个基础材料主要分为线性代数和 ...
- 斯坦福CS229机器学习课程的数学基础(线性代数)翻译完成
Stanford cs229 manchine learning课程,相比于Coursera中的机器学习有更多的数学要求和公式的推导,课程全英文,基础材料部分还没有翻译.这个基础材料主要分为线性代数和 ...
最新文章
- eolinker开源版5_开源土豪沉金版空气质量检测仪AirWolf
- 探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤
- 在 Java 中应用设计模式 - Factory Method
- CodeForces 321A Ciel and Robot(数学模拟)
- CDH HUE集成MySQL
- c语言重新进入for循环,大佬们帮帮忙 帮我改改 怎样能在输入Y后 再次进行for循环...
- iOS Block全面分析
- java中怎么把数字打印在屏幕上_java中如何打印出蜗牛形状的数字
- Linux端BaiduPCS-Go使用方法
- uniapp小程序生成海报图
- java word书签_java和javascript获取word的 书签位置
- php处理头像,(头像处理)PHP把图片转换成圆形png
- 柳传志:我是任正非的知音
- PHP裂变红包源码,php版本微信裂变红包api详解
- 公关广告策略分析:如何结合广告的推力和公关的拉力
- 【※taskmgr.exe进程知识详解※电脑知识】
- 微信加拿大服务器,微信新功能,在加拿大也可以任意刷人民币了
- android隐私违规获取问题处理 及 Hook拦截处理记录 (VirtualXposted/epic等)及 android/iOS 多bundle加载方式修复方案
- 使用Itextsharp编辑PDF
- IOS去除文件后缀名