数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】

文章目录

  • 一、最小二乘法是什么?
  • 二、非线性回归是什么?
  • 三、最小二乘法 和 回归分析 之间有什么关系?
  • 三、样例及做题过程
    • 第一步:问题的分析
    • 第二步:模型的建立
    • 第三步:模型的求解
    • 第四步:结果的分析及验证(额外)
  • 四、总结:
  • 五、参考附录:


我尽量用通俗的语言来描述。

虽然这道题是 非线性回归 的问题,但其 做题步骤做题思想 和 线性回归 是相似的,也可作参考。

数学建模系列文章——总结篇:《数模美一国一退役选手的经验分享[2021纪念版]》.


一、最小二乘法是什么?

  最小二乘法(又称最小平方法)是一种数学优化技术。它通过 最小化误差的平方 和寻找数据的最佳函数匹配。

  利用最小二乘法可以简便地求得 未知 的数据,并使得这些求得的 数据与实际数据 之间 误差的平方和 为最小 。

  曲线拟合 可用最小二乘法来进行进行 参数估计 (即用来估计斜率k和截距b)。最小二乘法也可用于其他 优化问题


二、非线性回归是什么?

  非线性回归是回归函数关于未知回归系数具有 非线性结构 的回归。常用的处理方法有回归函数的线性迭代法、分段回归法、迭代最小二乘法等。非线性回归分析的主要内容与线性回归分析相似。


三、最小二乘法 和 回归分析 之间有什么关系?

   “ 最小二乘法 ” 只是 回归分析 中的一种方法,同样地,和最小二乘法相对应的还有:最小绝对值法 等。
   更多概念区分详见链接:https://blog.csdn.net/Wang_Dou_Dou_/article/details/118739458?spm=1001.2014.3001.5501.


三、样例及做题过程

	举一个简单的栗子:有个房地产投资商,给你一张表如下。然后让你来预测2010年该地区的房价。

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第1张图片

第一步:问题的分析

  要预测2010年该地区的房价,首先必须要找到一个年份与房价之间的函数表达式,使其能够比较好的 “贴近” 这些样本数据点,并且达到误差最小。

  要实现这一点,我们首先要确定使用怎样的一个函数。

  为了找到这样一个函数,我们先用最简单的函数试一下,即线性函数或二次函数。利用MATLAB的数据拟合功能,分别对数据点进行线性和二次拟合,在这里我们只是想 直观地 看一看,用线性或者二次函数能不能较好第 “贴近” 这些数据点。


% x是年份,以2007年为第0年,y是房价
x = 0:2009 - 1997;
y = [767 895 995 1117 1261 1437 1640 1957 2244 2489 2801 3096 3500];
fy1 = polyfit(x,y,1);   % 线性拟合
fy2 = polyfit(x,y,2);   % 二次拟合

t = 0:0.1:2009 - 1997
y1 = zeros( size(t) );  % 初始化
y2 = zeros( size(t) );  % 初始化
y1 = polyval(fy1,t);    % 得到线性拟合的纵坐标值
y2 = polyval(fy2,t);    % 得到二次拟合的纵坐标值

plot(x,y,'*',t,y1,'--',t,y2,'-');
xlabel('时间/年(记2007年为第0年)');
ylabel('房价/元');
legend('原始数据','一维拟合','二维拟合');


运行结果如下:

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第2张图片

  从上图中可以直观地看出,房价和时间(年份)的关系更加接近于一个二次函数、由此分析,我们应该为此建立一个二次函数的回归模型。


第二步:模型的建立


  我们所要建立的二次函数的回归模型,应该能够使得函数能够 “最好的” 表现房价y 和 年份x 的关系。而什么才算 “最好的” 的呢? 这个时候,就用上 最小二乘法 了。其 核心思想 就是,让 函数上的值 与 实际值 之间的差别最小

  在建立数学模型之前,首先要明确一下变量:y 是指房屋的价格, x 是指时间(年份),而 y ^ \hat y y^ 是由函数 y ^ ( x ) \hat y(x) y^(x) 所确定的房价y的 估计值

  即设: y ^ ( x ) \hat y(x) y^(x) = a0 + a1x + a2x2

  并找到合适的参数 a0 、 a1 、 a2
  使得
在这里插入图片描述

  达到最小值。


第三步:模型的求解


  这一步相当于要求我们找到三个参数来求 y ^ ( x ) \hat y(x) y^(x) ,并要求使得 上面的(1)式 达到最小。由于 y ^ ( x ) \hat y(x) y^(x) = a0 + a1x + a2x2 ,其中 x 和 y 的数据都已知。则具体步骤如下:

--------------------------分割线----------------------------
  Step1:显然 该函数【说的是(1)式】的变量有三个【注:我没有展开(1)式的 y ^ ( x ) \hat y(x) y^(x)】,即 a0 、 a1 、 a2 ,要求函数的最小值,则需分别对三个变量求偏导,并令其等于0,如下如所示:

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第3张图片
  如想知道为什么要这么做,知其具体原理,详见参考附录[6]

  用matlab来求解这个方程组。

  写一个有助于理解的方程【配合代码看】:
在这里插入图片描述


clc,clear,close all;
x = 0:2009 - 1997;
y = [767 895 995 1117 1261 1437 1640 1957 2244 2489 2801 3096 3500];
x_new = zeros(length(x),3);

% 因为用的是二维拟合,则 x_new 应该为 3*13 的矩阵,第一列为 1 ,第二列为 x ,第三列为 x^2
x_new(:,1) = 1;
x_new(:,2) = x';
x_new(:,3) = (x.^2)';
[b,bint,r,rint,stats] = regress(y',x_new)      % 调用回归函数regress
plot(x,y,'bo');
hold on;
y2 = b(3,1) * x.^2 + b(2,1) * x + b(1,1);      % 非线性回归结果
plot(x,y2,'r*');
t = 0:0.01:12;
xian_y = b(3,1) * t.^2 + b(2,1) * t + b(1,1);  % 回归曲线
plot(t,xian_y,'-');
legend('原始数据','非线性回归结果','回归曲线');
xlabel('时间/年(记2007年为第0年)');
ylabel('房价/元');
                  

运行结果如下:

  a0 = 779.2418
  a1 = 75.4540
  a2 = 12.5899

结果图为:

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第4张图片


--------------------------分割线----------------------------
  Step2:只是求出了这三个参数还不够。我们还要分析一下在 1 - α = 0.95 的置信水平下,参数 a0 、 a1 和 a2 的置信区间是多少。我们利用matlab提供的 “[b, bint, r, rint, stats] = regress(因变量y, 自变量x, 显著性水平α)” ,即可以得到如下数据:

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第5张图片
说明:
  ①regress()中的 α 为显著性水平(缺省时默认为0.05)

  ②b,bint 为 回归系数估计值 和 它们的置信区间

  ③r,rint 为 残差(向量) 及其 置信区间

  ④stats 是用于检验回归模型的统计量,有4个数值,第一个是拟合优度 R2,第二个是 对方程整体显著性检验 的 F检验 ,第三个是 p值,第四个是 误差方差的估计值 s 2 s^2 s2

整理运行结果后得到下面这张表:

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第6张图片

  由上表可知,R2=0.9989 表示因变量y(房价)的99.89%可由模型确定,F值 远远超过 F检验的临界值,p 远小于 α,因而该回归模型从整体来看是可用的。

补充: F检验 、 p值 、误差方差s2 的原理详见文章最后的参考附录[2]、[3]、[4]

--------------------------分割线----------------------------
  Step3
  得到最终表达式如下:
在这里插入图片描述

  并将 y = 2010 - 2007 = 13 带入此方程,得到2010年估计的房价 y ^ ( 13 ) = 3887 ( 元 ) \hat y(13)=3887(元) y^(13)=3887()

注:如果这道题单纯的只是个 回归分析问题 ,那么做到这里就可以了。顶多再加一张 残差分析图 ,利用 matlab 的函数 rcoplot(r,rint) 即可。如下图所示,最后再加一点文字分析即可。

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第7张图片


第四步:结果的分析及验证(额外)

注:因为这是 预测问题 ,所以还要继续做下去。

  为了分析该结果的 合理性准确性 ,我们还应该考虑这样的问题:如果说房价与年份之间有这么一个不为人知的 但是具有 “确定性” 的函数关系 y = y ( x ) y= y(x) y=y(x) ,而得到的函数 y = y ^ ( x ) y=\hat y(x) y=y^(x) 和它之间肯定具有一定的误差。我们不妨将此误差设为 ε ε ε ,则我么能得到一个关系式如下:
y = y ^ ( x ) + ε y=\hat y(x) + ε y=y^(x)+ε  而如果 ε ε ε 满足某个分布的话,我们就可以估计2010年房价的一个合适的范围,而不是 前面得到的 “3887” 这么一个 “光秃秃、干巴巴” 的值。

   经过整理后,我们得到下表:

在这里插入图片描述
   假设 ε ε ε 服从正态分布,即 ε ~ N( μ, σ2 ) ,不妨使用 矩估计 的方法来确定参数 μ ^ \hat μ μ^ σ ^ \hat σ σ^ 的值,于是得到下面这个方程组:
数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第8张图片

   手算后解得: μ ^ ≈ 0 \hat μ≈0 μ^0 σ ^ = 102 \hat σ=102 σ^=102
   由此可用matlab绘出 ε ε ε 的概率分布图 :

数学建模——基于 最小二乘法 的 回归分析 →预测问题(工具:matlab,线性回归和非线性回归通用)【全文9000字】_第9张图片
  matlab的代码如下:


clc;clear;close all;
x = -300:1:300;
y = zeros(length(x));
miu = 0;
sigma = 102;
y = 1/(sqrt(2*pi)*sigma) * exp(-(x-miu).^2/(2*sigma.^2)) * 100;
plot(x,y)
ylabel('ε出现的概率(%)');
xlabel('房价(元)');
title('房价误差的正态分布图');

   对于 ε ε ε 的概率分布图,我们希望找到一个 ε ε ε 的阈值 ε ′ ε' ε ,使得当 ∣ ε ∣ ≤ ε ′ |ε|≤ε' εε 时, P ( ∣ ε ∣ ≤ ε ′ ) ≥ 0.7 P(|ε|≤ε')≥0.7 P(εε)0.7这样做的目的是,我们希望得到一个房价区间,使2010年的 真实房价 落在这个区间的内的概率比较大(这里的 “比较大” 就是指取的 0.7 )。

   由概率论可知,正态分布曲线是对称的。则由 P ( ε ≥ ε ′ ) = 1 2 × [ 1 − P ( ∣ ε ∣ ≤ ε ′ ) ] = 0.15 P(ε≥ε')=\frac {1}{2} \times [1-P(|ε|≤ε')]=0.15 P(εε)=21×[1P(εε)]=0.15 ,可得 P ( ε ≤ ε ′ ) = 1 − P ( ε ≥ ε ′ ) = 0.85 P(ε≤ε')=1-P(ε≥ε')=0.85 P(εε)=1P(εε)=0.85 。而 P ( ε ≤ ε ′ ) = Φ ( ε ′ − 0 102 ) P(ε≤ε')=Φ( \frac {ε'-0}{102}) P(εε)=Φ(102ε0)

  查表 得出 Φ ( 1.04 ) = 0.85 Φ( 1.04) =0.85 Φ(1.04)=0.85,所以我们得到 ε ε ε 的阈值 ε ′ ε' ε 约为 100 (元)。【注:100 是由 ε ′ − 0 102 = 1.04 \frac {ε'-0}{102}=1.04 102ε0=1.04 解得到的】

  综上所述,我们用 最小二乘法 的出 y ^ ( x ) \hat y(x) y^(x) 的表达式,并用此来预测了2010年的房价,同时分析了 y ^ ( x ) \hat y(x) y^(x) y ( x ) y(x) y(x) 的误差 ε ε ε ,并得出结论:

  在 70%的精确度 下,2010年的房价应该在 3887±100 元之内。


四、总结:

  第一步:问题的分析(画散点图)

  第二步:模型的建立(直观地找出适合的回归函数)

  第三步:模型的求解(最小二乘法回归+检验+分析)

  第四步:结果的分析及验证(额外内容,预测问题就要多做这一步)

  最后,我没有详细地阐述其原理,只阐述了有什么用、怎么用。如要了解详细的原理,可以看看文章最后的 参考附录 吧。


五、参考附录:

[1] 《数学建模——区分“拟合、插值、多元线性回归、逻辑回归、逐步回归、最小二乘法”等概念【概念篇】》
链接: https://blog.csdn.net/Wang_Dou_Dou_/article/details/118739458?spm=1001.2014.3001.5501.

[2] 《F检验》
链接: https://baike.baidu.com/item/F%E6%A3%80%E9%AA%8C/9910842?fr=aladdin.

[3] 《P值》
链接: https://baike.baidu.com/item/P%E5%80%BC.

[4] 《如何用stata求误差方差 s2 的估计值》 看追问的那条回复即可
链接: https://zhidao.baidu.com/question/397143810094044805.html.

[5] 《最小二乘法多元线性回归_使用Matlab解决多元线性回归问题》这里面有教如何清理异常数据
链接: https://blog.csdn.net/weixin_39636645/article/details/112712714.

[6] 《数学建模之数据拟合(3):最小二乘法》看完这个视频,你可以 更友好地理解 最小二乘法
链接: https://www.bilibili.com/video/BV1q741177US?from=search&seid=12421359005753840035.

数学建模系列文章——总结篇:《数模美一国一退役选手的经验分享[2021纪念版]》.


⭐️ ⭐️

你可能感兴趣的:(数学建模,数学建模)