回归分析

根据回归方法中因变量的个数和回归函数的类型(线性或非线性),可将回归方法分为一元线性回归、一元非线性回归和多元回归。
简单粗暴理解:可以理解为找到一个从特征空间X到输出空间Y的最优的线性映射函数的过程。
(关于定义个人认为没必要去纠结,只要知道这个东西和会用就可以了)

重点说明:关于线性与非线性回归,很多知识点我总结在了代码里面,每段代码开头会有很多说明,参数说明和知识点,建议看的时候多看看代码开头的说明

一元线性回归

对一元线性线性回归,简单粗暴理解就是给出一堆点,(x1,y1),(x2,y2),…(xn,yn),然后根据一元线性回归方程(固定的)求解β0,β1的过程,一元线性回归方程跟高中学的基本一样,只不过之前要人算,现在可以用matlab算。

还不懂的看案例(MATLAB数学建模方法与实践(第3版)第48页):

这是一个经典的一元回归问题,根据所给定的点,求解出回归系数的过程,下面给代码,重点看代码里面的知识点和参数说明,在每一段正式代码开头。

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% 回归分析就是处理变量之间的相关关系的一种数学方法。其解决问题的大致方法、步骤如下:
%               (1)收集一组包含因变量和自变量的数据;
%               (2)选定因变量和自变量之间的模型,即一个数学式子,利用数据按照最小二乘准则计算模型中的系数;
%               (3)利用统计分析方法对不同的模型进行比较,找出与数据拟合得最好的模型;
%               (4)判断得到的模型是否适合于这组数据;
%               (5)利用模型对因变量作出预测或解释。
%
% 一元线性回归方程:
%                   y = β0 + β1*x;  β为回归系数
%
%
% matlab模块说明:
% (1)plot(x,y,'r*');
% (2)n = length(x),X=[ones(n,1),x'];
% (3)Y = y';
% (4)[b,bint,r,rint,s]=regress(Y,X,alpha);
% 参数说明:plot(x,y,'r*'):绘制散点图
%           X:由给定的x值决定,(X必须为列矩阵,所以如果x是行矩阵的话必须通过x'转置为列向量)
%           Y:由给定的y值决定,(Y必须为列矩阵,所以如果y是行矩阵的话必须通过y'转置为列向量)
%           alpha:显著性水平(缺省时默认0.05)
%           b:相关系数的集合,一元线性回归,b有两个值,b(1,1) = β0,b(2,1) = β1
%           bint: 回归系数的区间估计
%           r :残差
%           rint :残差置信区间
%           s :用于检验回归模型的统计量,有四个数值:相关系数R^2、F值、与F对应的概率p,误差方差。
%           注意:s通常用于做模型的检验,1.关系数R^2越接近1,说明回归方程越显著;
%                                       2.p<alpha时,拒绝H0,回归模型成立
%                                       3.F > F1-alpha(k,n-k-1)【通过该函数finv(1-,1, n-2)得到】时拒绝H0,F越大,说明回归方程越显著,其中F1-alpha(k,n-k-1)的值可查F分布表,或直接用MATLAB命令finv(1-,1, n-2)计算得到
% (4)残差分析:rcoplot(r,rint)
%             绘制出的图,标红的点为异常数据,可以去掉后再重新做计算一元线性回归分析
%
%
% matlab实现:
% (1)输入:
%         x(1*n)矩阵存储x坐标
%         y(1*n)矩阵存储y坐标
% (2)输出:
%         [b,bint,r,rint,s]=regress(Y,X,alpha);里面的所有参数,回归系数b构成一元回归模型
%         残差图分析
%
% 重点:如果出现错误;"错误使用 horzcat串联的矩阵的维度不一致"可能是X,Y那里的行矩阵和列矩阵的转化出现问题
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % clc
% 数据的存储
% x = [3.5 5.3 5.1 5.8 4.2 6.0 6.8 5.5 3.1 7.2 4.5 4.9 8.0 6.5 6.6 3.7 6.2 7.0 4.0 4.5 5.9 5.6 4.8 3.9];
% y = [33.2 40.3 38.7 46.8 41.4 37.5 39.0 40.7 30.1 52.9 38.2 31.8 43.3 44.1 42.5 33.6 34.2 48.0 38.0 35.9 40.4 36.8 45.2 35.1];x=[23.80,27.60,31.60,32.40,33.70,34.90,43.20,52.80,63.80,73.40];
y=[41.4,51.8,61.70,67.90,68.70,77.50,95.90,137.40,155.0,175.0];    % 绘制散点图
% plot(x,y,'r*');% 数据的长度
n=length(x); % X,Y制作
X=[ones(n,1),x'];
Y = y';% 线性分析
[b,bint,r,rint,s]=regress(Y,X,0.05);
b
bint
% r
% rint
s% 残差分析
figure;
rcoplot(r,rint);fprintf('拟合的函数为:f(x) = %d + %d*x\n',b(1,1),b(2,1));
figure
f = @(x) b(1,1) + b(2,1) * x;
plot(x,y,'r*');
hold on;
ezplot(f, [0, 90]);             % 画出函数图像
title('拟合的曲线');

运行结果:

关于运行结果中的参数,b,bint,r,rint,s等在上面代码开头的参数说明那里,这个很重要,建议多看一下。

多元线性回归

在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。对于多元线性回归,相对于一元线性回归只不过是回归系数变多了,自变量变多了,其他基本差不多。同样的道理,给出一堆点,不过这些点对应的自变量比较多(两个以上),求解偏回归系数的过程。

案例(MATLAB数学建模方法与实践(第3版)第52页):


上面第二张图为书里面的解题思路(要是嫌烦可以不看),下面给代码:

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% 回归分析就是处理变量之间的相关关系的一种数学方法。其解决问题的大致方法、步骤如下:
%               (1)收集一组包含因变量和自变量的数据;
%               (2)通过绘制散点图,判断是否符合线性回归,决定用哪种线性回归
%               (3)选定因变量和自变量之间的模型,即一个数学式子,利用数据按照最小二乘准则计算模型中的系数;
%               (4)利用统计分析方法对不同的模型进行比较,找出与数据拟合得最好的模型;
%               (5)判断得到的模型是否适合于这组数据;
%               (5)利用模型对因变量作出预测或解释。
%
% 多元线性回归方程:y=b0+b1X1+b2X2+…+bnXn
%                   b0为常数项
%                   b1,b2,b3,…bn称为y对应于x1,x2,x3,…xn的偏回归系数
%
%
% matlab模块说明:
% (1)subplot(1,3,1),plot(x1,y,'g*'),
%    subplot(1,3,2),plot(x2,y,'k+'),
%    subplot(1,3,3),plot(x3,y,'ro'),
%    ......
% (2)n = length(x1),X=[ones(n,1),x1',x2',x3',...];
% (3)Y = y';
% (4)[b,bint,r,rint,s]=regress(Y,X,alpha);
% 参数说明:subplot(1,3,1),plot(x1,y,'g*'):绘制散点图
%           X:由给定的x值决定,(X必须为列矩阵,所以如果x是行矩阵的话必须通过x'转置为列向量)
%           Y:由给定的y值决定,(Y必须为列矩阵,所以如果y是行矩阵的话必须通过y'转置为列向量)
%           alpha:显著性水平(缺省时默认0.05)
%           b:相关系数的集合,一元线性回归,b有两个值,b(1,1) = β0,b(2,1) = β1
%           bint: 回归系数的区间估计
%           r :残差
%           rint :残差置信区间
%           s :用于检验回归模型的统计量,有四个数值:相关系数R^2、F值、与F对应的概率p,误差方差。
%           注意:s通常用于做模型的检验,1.关系数R^2越接近1,说明回归方程越显著;
%                                       2.p<alpha时,拒绝H0,回归模型成立
%                                       3.F > F1-alpha(k,n-k-1)【通过该函数finv(1-,1, n-2)得到】时拒绝H0,F越大,说明回归方程越显著,其中F1-alpha(k,n-k-1)的值可查F分布表,或直接用MATLAB命令finv(1-,1, n-2)计算得到
% (4)残差分析:rcoplot(r,rint)
%             绘制出的图,标红的点为异常数据,可以去掉后再重新做计算一元线性回归分析
%
%
% matlab实现:
% (1)输入:
%         x1(1*n)矩阵存储x1坐标
%         x2(1*n)矩阵存储x2坐标
%         ......
%         y1(1*n)矩阵存储y坐标
%         y2(1*n)矩阵存储y2坐标
%         ......
% (2)输出:
%         [b,bint,r,rint,s]=regress(Y,X,alpha);里面的所有参数,回归系数b构成多元回归模型
%         残差图分析
%
% 重点:如果出现错误;"错误使用 horzcat串联的矩阵的维度不一致"可能是X,Y那里的行矩阵和列矩阵的转化出现问题
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % clc
% 数据的存储
x1 = [3.5 5.3 5.1 5.8 4.2 6.0 6.8 5.5 3.1 7.2 4.5 4.9 8.0 6.5 6.6 3.7 6.2 7.0 4.0 4.5 5.9 5.6 4.8 3.9];
x2 = [9 20 18 33 31 13 25 30 5 47 25 11 23 35 39 21 7 40 35 23 33 27 34 15];
x3 = [6.1 6.4 7.4 6.7 7.5 5.9 6.0 4.0 5.8 8.3 5.0 6.4 7.6 7.0 5.0 4.4 5.5 7.0 6.0 3.5 4.9 4.3 8.0 5.8];
y = [33.2 40.3 38.7 46.8 41.4 37.5 39.0 40.7 30.1 52.9 38.2 31.8 43.3 44.1 42.5 33.6 34.2 48.0 38.0 35.9 40.4 36.8 45.2 35.1];% 绘制散点图
subplot(1,3,1);plot(x1,y,'g*');
subplot(1,3,2);plot(x2,y,'k+');
subplot(1,3,3);plot(x3,y,'ro');% 数据的长度
n=length(x1); % X,Y制作
X=[ones(n,1),x1',x2',x3'];
Y = y';% 线性分析
[b,bint,r,rint,s]=regress(Y,X,0.05);
b
bint
% r
% rint
s% 残差分析
rcoplot(r,rint);

运行结果:

关于运行结果中的参数,b,bint,r,rint,s等在上面代码开头的参数说明那里,这个很重要,建议多看一下。

一元非线性回归

非线性回归是回归函数关于未知回归系数具有非线性结构的回归。简单理解就是非线性回归就是曲线回归。
在做非线性回回归时,一般要先确定该非线性回归模型后在做非线性回归;解题思路是先将所给的数据点通过matlab绘图的方式画出来,再看看画出来的散点图比较符合哪个非线性回归模型就选择那个模型,最后再做非线性回归分析。

关于模型,这里给大家整理了一些:


其他的非线性回归模型可以自己网上搜一下。

案例(MATLAB数学建模方法与实践(第3版)第50页):

代码:

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% matlab模块介绍:
%   [beta,r]=nlinfit(x,y,'fun1',beta0);
%   beta即所要求的相关系数,
%   r为残差
%   x为数据的x轴坐标,n*m的矩阵存储,当x有多个时(x1,x2,x3...),每组x为一列,x1为1列,x2为第二列,x3为第三列...组成n*m的矩阵
%   y为数据的y轴坐标,以列矩阵的方式存储
%   fun1为函数模型的表达式,一般要先确定该模型后在做非线性回回归,该函数一般用单独的.m文件存放,或者自己定义
%   beta0为多个相关系数初始值,该系数需要自己猜测,再从初值一步步迭代算出最终系数
%
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
clc
% 数据:
x=[1.5, 4.5, 7.5,10.5,13.5,16.5,19.5,22.5,25.5]';
y=[7.0,4.8,3.6,3.1,2.7,2.5,2.4,2.3,2.2]';  %% 对数模型拟合:f(x) = b(1) + b(2)*log(x)
myfunc = inline('beta(1)+beta(2)*log(x)','beta','x');%三个参数分别为:函数模型(注意需要使用点除和点乘),待定系数,自变量beta0 = [0.2,0.2]';%待定系数的预估值,可固定不变% beta为求得的相关系数
beta = nlinfit(x,y,myfunc,beta0);figure;
plot(x,y,'.');
hold on%保证同时显示x = 0:0.01:8;
y = beta(1)+beta(2)*log(x);plot(x,y);
title('对数模型拟合');%% 指数模型拟合:f(x) = b1*x^b2;
% myfunc = inline('beta(1)*x.^beta(2)','beta','x');%三个参数分别为:函数模型(注意需要使用点除和点乘),待定系数,自变量
%
% beta0 = [0.2,0.2]';%待定系数的预估值,可固定不变
%
% % beta为求得的相关系数
% beta = nlinfit(x,y,myfunc,beta0);
%
% figure;
% plot(x,y,'.');
% hold on%保证同时显示
%
% x = 0:0.01:8;
% y = beta(1)*x.^beta(2);
%
% plot(x,y);
% title('指数模型拟合');

上面两种模型只能单独运行,运行一个得注释另外一个。

运行结果:

关于运行结果中的参数在上面代码开头的参数说明那里,这个很重要,建议多看一下。

以上就是全部内容,如有错误的地方,望大家批评指正。

菜鸟的数学建模之路(二):线性与非线性回归相关推荐

  1. 菜鸟的数学建模之路(一):最短路径算法

    最短路径算法主要有两种,Dijkstra算法和floyd算法,当时在学习这两种算法时经常弄混了,关于这两种算法,记得当时是在交警平台设置的那一道题目上了解到的,就去查很多资料,花了不少时间才基本了解了 ...

  2. 菜鸟的数学建模之路(四):BP神经网络

    个人理解 BP神经网络属于人工智能范畴,在我看来它更多的是一个用于预测的工具,尽管它的用处还不仅于此.在数学建模上,很多时候,题目提供了很多历史数据,我经常用这些历史数据,用BP神经网络训练它,利用训 ...

  3. 菜鸟的数学建模之路(七):灰色预测方法

    灰色预测的概念 灰色系统.白色系统和黑色系统 (1)白色系统是指一个系统的内部特征是完全已知的,既系统信息是完全充分的. (2)黑色系统是一个系统的内部信息对外界来说是一无所知的,只能通过它与外界的联 ...

  4. 菜鸟的数学建模之路(零):我的数学建模之路

    更新说明 更新时间:2019/9/8 最近有人问我要数学数学建模资源,由于之前我还没有整理好就没上传,现在已经上传在我的个人主页"已上传资源"那里. 声明:里面的资源整理来自网络和 ...

  5. 菜鸟的数学建模之路(六):层次分析法

    层次分析法(AHP):一种层次权重决策分析方法,日常生活中比如:冰箱品牌的选购(考虑到价格,性能,售后等因素):旅游景点的选择(交通,居住环境,饮食等). 解题步骤: (1).建立层次结构模型 (2) ...

  6. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

  7. 一篇文章带你认识数学建模中的二维插值

    本篇文章主要是认识数学建模中的二维插值 二维插值的具体计算可参考:一篇文章带你搞定二维插值的 MATLAB 计算 文章目录 一.引言 二.网格节点的概念 三.散乱节点的概念 四.二维插值的常见方法 1 ...

  8. 2022国赛数学建模思路 - 案例:线性优化-粒子群算法

    2022 高教社杯(国赛数学建模)思路解析 2022高教社杯ABCD赛题思路解析: https://blog.csdn.net/dc_sinor/article/details/126211983 1 ...

  9. Python数学建模系列(二):规划问题之整数规划

    文章目录 前言 整数规划 例题 方法一:分支定界法(使用scipy库) 方法二:使用pulp库进行求解 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- ...

最新文章

  1. [scrum]2011/9/22-----第二天
  2. FastSpeech语音合成系统技术升级,微软联合浙大提出FastSpeech2
  3. 写 Python 代码不可不知的函数式编程技术
  4. 2、Python基础--除法、常用数学函数
  5. 1.4 以查询取代临时变量
  6. asio::write RuntimeError
  7. grep -v XXXXX
  8. 怎样制作html插件,自己动手制作一个Chrome插件 入门级
  9. Access常用类型及查询语法 [Access]
  10. python json序列化对象_Python学习之json序列化
  11. C语言解决约瑟夫环问题 详细注释
  12. 可靠的自托管「GitHub 热点速览 v.22.37」
  13. Android 启动模式及singleTask与Home键存在的问题
  14. yaahp使用教程_结合层次分析法和模糊综合评价法的评价方法-利用yaahp
  15. Matlab根据excel数据画图
  16. 惊!12306官网又现用户信息泄露?
  17. JVM和DVM的区别
  18. data为什么是一个函数
  19. ntoskrnl导致的蓝屏死机问题
  20. rewind函数+php,PHP SplFixedArray rewind()用法及代码示例

热门文章

  1. 【LittleVGL】stm32f412-discovery探索板-ft6x06驱动问题
  2. 20210904英雄联盟记录
  3. mysql 统计表中条目数量的几种方法
  4. 21点 小游戏 java代码_基于Java的21点扑克游戏的实现
  5. 国际多语言版抖音快手脸书LINETIKTOK悬赏平台
  6. 《心流:最优体验心理学》读书笔记
  7. Excel按背景颜色分类统计各颜色个数的操作
  8. 《闲扯Redis九》Redis五种数据类型之Set型
  9. 边沿触发是什么意思_epoll边缘触发模式
  10. js计算日期差;js计算天数差