最小二乘法推导和证明(matlab代码实现)
2017-10-08 11:48
573 查看
声明: 仅个人小记
最好的拟合情况:
糟糕的拟合情况:
上面的图展现出了我们想要探究的问题,即,确定哪条直线是最好的拟合直线,而本文探究的最小二乘法就是一种确立最好的拟合直线的方法。
注意: 上面的图展示的只有两个变元的情况,而实际情况中,多元的情况比比皆是。最小二乘法适用于多元的情况。
显然,这里的不仅仅是一元函数问题,而是多元函数问题。最小二乘法主要涉及多元微分学里的极值,最值问题。
2. 最小二乘法处理二元情况
但是从数学角度上,最好的拟合直线一定存在就是意味着多元函数一定有极小值,一定有最小值。也就是意味着Hessian矩阵一定为正定的。
注: Hessian矩阵用来判定极值的性质的,判定极大值、极小值、还是非极值、还是不确定。本例中相应Hessian矩阵如下:
还有一个需要讨论并证明的是:
我们要处理的对象转为数学中的多元微分函数,而寻求最好的拟合直线问题转化为数学上求解多元微分函数的最小值问题
2017年10月8日 14:29:01 By Jack Lu
前言
数据理论上是呈现线性关系,但是实际数据往往不是满足线性关系,但大体上的趋势呈现出线性关系。这个时候,我们最终希望得到的是唯一的线性关系,而不是一堆实验数据,所以产生了用一堆实验数据来确立理论上的线性关系的这样的问题。这样的问题,我记得在初中,高中物理里面经常用到,做实验得到很多组电流和电压的数据值,然后画在二维坐标上,往往,这些电流电压数据值并不在一条直线上,但大体上都有固定的一个趋势,面对这种情况,我们并不是把实际的电流电压连成折线,而是手动根据标号的数据点来拟合出一条直线。情境引入:
最好的拟合情况:
糟糕的拟合情况:
上面的图展现出了我们想要探究的问题,即,确定哪条直线是最好的拟合直线,而本文探究的最小二乘法就是一种确立最好的拟合直线的方法。
注意: 上面的图展示的只有两个变元的情况,而实际情况中,多元的情况比比皆是。最小二乘法适用于多元的情况。
显然,这里的不仅仅是一元函数问题,而是多元函数问题。最小二乘法主要涉及多元微分学里的极值,最值问题。
最小二乘法
1. 最小二乘法思想简洁,公式也不复杂,如下2. 最小二乘法处理二元情况
证明最好的拟合直线一定存在
实际意义上,我们能容易感受到一定会有一条直线,使得偏差平方和最小。但是从数学角度上,最好的拟合直线一定存在就是意味着多元函数一定有极小值,一定有最小值。也就是意味着Hessian矩阵一定为正定的。
注: Hessian矩阵用来判定极值的性质的,判定极大值、极小值、还是非极值、还是不确定。本例中相应Hessian矩阵如下:
还有一个需要讨论并证明的是:
我们要处理的对象转为数学中的多元微分函数,而寻求最好的拟合直线问题转化为数学上求解多元微分函数的最小值问题
Matlab代码
% 最小二乘法目的是得到一条最好的拟合直线 % d*a+e*b = u % p*a+q*b = v % 其中p == d n = 6; x = zeros(1,n); y = zeros(1,n); %x(1,1:n/2) = round(rand(1,n/2)*50); %y(1,1:n/2) = round(rand(1,n/2)*50); %x(1,(n/2+1):n) = round(rand(1,n/2)*50+50); %y(1,(n/2+1):n) = round(rand(1,n/2)*50+50); %x = round(rand(1,n)*100); %y = round(rand(1,n)*100); x = [1.3 1.9 3.2 4.1 5.2 6.3]; y = [2.3 4.1 6.3 8.2 10.3 11.8]; %x = 1:100; %y(:) = 50+2*x; plot(x,y,'g*') d = 0; e = 0; u = 0; p = 0; q = 0; v = 0; for i = 1:n d = d + 2*x(i)*x(i); e = e + 2*x(i); u = u + 2*x(i)*y(i); v = v + 2*y(i); end p = e; q = 2*n; % 利用克拉默法则来解方程组 D = det([d e; p q]); a = det([u e; v q])/D; b = det([d u; p v])/D; % 绘制出最好的拟合直线 t = min(x):0.1:max(x); g = a*t+b; hold on plot(t,g,'r') hold off
代码运行结果展示
补充
最小二乘法是可以直接推向多元情况,上述只是探讨了两个变元的情况,最小二乘法确立了最好的拟合直线y = ax+b(两个待定参数)。如果是三个变元,那么我们就是用最小二乘法来确立最好的拟合平面z=ax+by+c(三个待定参数)。如果是n个变元,我们就是用最小二乘法来确立最好的拟合超平面,超平面方程中含n个待定参数。2017年10月8日 14:29:01 By Jack Lu
相关文章推荐
- 神经网络中的反向传播法算法推导及matlab代码实现
- 机器学习小组知识点4&5:批量梯度下降法(BGD)和随机梯度下降法(SGD)的代码实现Matlab版
- 高斯牛顿法 matlab代码实现
- Coursera deeplearning.ai 深度学习笔记1-3-Shallow Neural Networks-浅层神经网络原理推导与代码实现
- 聚类方法:DBSCAN算法研究(3)--C++代码实现及与matlab实例结果比较
- 菜鸟学matlab之智能算法(1)------蚁群算法即相关代码实现详解
- L-K光流推导及OpenCV代码实现
- 【web】PHP网页调用Matlab代码的实现以及一些需要注意的bug~
- 基于模型设计的FPGA开发与实现:滤波器设计与实现(四)Matlab中滤波器HDL代码生成优化
- 稀疏表示字典的显示(MATLAB实现代码)
- 线性回归从公理到算法推导再到代码实现
- 最小二乘椭圆拟合matlab代码实现
- 支持向量机 SVM 算法推导优缺点 代码实现 in Python
- triplet loss原理推导及其代码实现
- 卡尔曼滤波简介及其算法实现代码(C++/C/MATLAB)
- 运用PCA(主成分分析法)进行人脸识别的MATLAB 代码实现
- 基于最小二乘法的曲线拟合的C++代码的实现
- SDM For Face Alignment 流程介绍及Matlab代码实现之预处理篇
- 稀疏表示字典的显示(MATLAB实现代码)
- 最小二乘法拟合圆公式推导及vc实现[转]