跟着川川学数模-Day4

目录

一、一元线性回归

二、多元线性回归


一、一元线性回归

今天是跟着川川学数模的第四天,也与前些天的规划问题不同,进入到了线性回归,那么我们先来看一下一元线性回归问题.

我们以某一数据列为例,代码如下

x=1:12;
y=[217.22 226.18 231.11 244.96 254.70 261.84 272.46 283.53 291.15 311.15 323.79 330.66];

然后跟着川川画一下散点图:

clc
clear all
x=1:12;
y=[217.22 226.18 231.11 244.96 254.70 261.84 272.46 283.53 291.15 311.15 323.79 330.66];
for i=1:12plot(x(i),y(i),'*r');hold on
end
xlabel('x');
ylabel('y');

 乍一看,好家伙这不就是一个跟直线吗,初始值比较大而已,那么我们来试试线性拟合:

clc
clear all
x=[1 2 3 4 5 6 7 8 9 10 11 12];
y=[217.22 226.18 231.11 244.96 254.70 261.84 272.46 283.53 291.15 311.15 323.79 330.66];
z=zeros(size(x));
n=length(x)
for i=1:nz(i)=log(x(i));
end
p=polyfit(x,y,1);

运行一下就得到了p=10.5408和202.2139;因此上述数据得到了一元函数y=10.5048*x+202.2139。

二、多元线性回归

这个东西,我刚好在数维杯中使用过,它的原理很简单,就是调用Matlab的函数:

[b,bint,r,rint,stats]=regress(y,x,alpha)

那么具体我是怎么使用的呢?在数维杯题中,每个城市有着诸多不同的气象数据指标,显然他们之间的量纲或者说相关性是不一致的,所以我们进行了皮尔逊相关系数的计算并画出热力图,代码如下:

clc
clear all
A=xlsread('Summary table of data for years with high precipitation.xlsx');
%这附件是比赛的附件啦~
data=A(:,3:23);
R = corrcoef(data)   % correlation coefficient
heatmap(R);
heatmap(R(:,5:end));

然后从诸多气象数据中挑选了三个与年平均降雨量最大的参数,进行多元线性回归,代码如下,先搞个主函数,这边choose是分别对应了不同的拟合情况,例如lsqcurvefit,regress,nlinfit等:

function [beta, r]=fit_nonlinear_data(X, Y, choose)
%lsqcurvefit optimal ternary one-shot fit
if choose==1X1=[ones(length(X(:, 1)), 1), X];[beta, bint, r, rint, states]=regress(Y, X1)rcoplot(r, rint)saveas(gcf,sprintf(' Non-linear curve fitting.jpg'),'bmp');
elseif choose==2beta0=ones(7, 1);[beta, r, J]=nlinfit(X, Y, @myfun, beta0)[Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');saveas(gcf,sprintf('Non-linear curve fitting _1.jpg'),'bmp');
elseif choose==3beta0=ones(7, 1);[beta,resnorm,r, ~, ~, ~, J]=lsqcurvefit(@myfun,beta0,X,Y)[Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');saveas(gcf,sprintf('Non-linear curve fitting _2.jpg'),'bmp');
end
end
function yy=myfun(beta,x) 
yy=beta(1)+beta(2)*x(:, 1)+beta(3)*x(:, 2)+beta(4)*x(:, 3)+beta(5)*(x(:, 1).^2)+beta(6)*(x(:, 2).^2)+beta(7)*(x(:, 3).^2);
end
%此代码参考某网站(具体找不太到了)

 这里咱就是搞一下regress:

clc
clear all
A=xlsread('Summary table of data for years with high precipitation.xlsx');
N1=A(:,17);
N2=A(:,19);
N3=A(:,22);
N4=A(:,23);
X=[N1,N2,N3];
choose=1;
fit_nonlinear_data(X, N4, choose)

运行结果就是这样的: 


beta =-7.89480.11000.01070.1919bint =-41.0649   25.27530.0240    0.1961-0.0219    0.04340.0540    0.3298r =-0.06240.65961.60791.26151.14170.5050-1.1769-1.0386-1.2403-1.7227-0.6183-0.27591.14200.77711.00120.75550.33190.19250.54350.2527-0.29740.10440.13650.7201-0.28020.1063-0.29210.8550-0.3224-0.2533-0.6592-0.0228-0.9088-0.2762-0.0840-0.92020.81461.42671.62252.33891.41081.27521.10420.22751.09250.05920.79561.6953-1.7199-1.52450.1444-0.5348-1.1332-1.2295-1.0016-1.5690-1.2875-2.3272-1.8256-1.4973rint =-2.2047    2.0799-1.4901    2.8094-0.5066    3.7223-0.8789    3.4020-0.9987    3.2821-1.6358    2.6459-3.2769    0.9230-3.1725    1.0953-3.3825    0.9019-3.8099    0.3645-2.7602    1.5236-2.4164    1.8646-0.9279    3.2119-1.3078    2.8620-1.1336    3.1360-1.3745    2.8856-1.7319    2.3957-1.9423    2.3273-1.5884    2.6754-1.8836    2.3890-2.4648    1.8700-2.0327    2.2416-1.9371    2.2101-1.3292    2.7694-2.3837    1.8232-2.0028    2.2153-2.4166    1.8323-1.2920    3.0020-2.3848    1.7401-2.3714    1.8649-2.7524    1.4341-2.1774    2.1317-3.0447    1.2271-2.4386    1.8863-2.2211    2.0531-2.7714    0.9310-1.2912    2.9204-0.6161    3.4695-0.5106    3.75550.2637    4.4140-0.6760    3.4976-0.8379    3.3884-1.0092    3.2176-1.9192    2.3742-1.0546    3.2397-2.1018    2.2202-1.3244    2.9156-0.3114    3.7019-3.7830    0.3431-3.4976    0.4485-2.0219    2.3108-2.6988    1.6293-3.2464    0.9800-3.3544    0.8953-3.0979    1.0947-3.6855    0.5476-3.4033    0.8282-4.3857   -0.2687-3.9089    0.2576-3.5234    0.5287states =0.1890    4.3508    0.0080    1.1854ans =-7.89480.11000.01070.1919>> 

即y=-7.8948+0.1100*x1+0.0107*x2+0.1919*x3,当时做完以后觉得很简单,置信区间大概在96%,但一个不巧,忘了归一化处理,此处不做论述,后来通过0-1归一化效果就好多了,这边多元回归出来的就是闹着玩。

以上便是关于一元线性和多元线性的回归问题,当然多元线性回归也不至于此,也需要考虑到拟合的效果,后面继续跟着川川学啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java - 计算不同字符或数字的个数

根据提示输入一行字符,这行字符可以是任意的,可以包含字母数字标点符号,特殊符号等,java程序会输出你输入字符串中各个类别字符的个数。 结果展示 代码展示 package com.one;import java.util.*;public class Flqgs {public st…

oracle去重保留一条_关于oracle数据库物理结构(文件)的一些总结

概述闲来无事,整理了下oracle数据库物理结构方面的内容,这里主要从数据库文件和操作系统文件两个方面来介绍。任何时候都要记得,数据库是数据存储的容器,作用是用来收集、存储数据和返回信息。物理结构数据库文件1.控制…

【youcans 的 OpenCV 例程200篇】138. 灰度开运算和灰度闭运算

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】138. 灰度开运算和灰度闭运算 5.2 灰度开运算和灰度闭运算 OpenCV 提供了函数 cv.morphologyEx 可…

跟着川川学数模-Day5

一、一些废话 哦莫,终于到了我最喜欢且不会的东西了,动态规划,求解最优路径,学会这玩意就能处理简单的TSP问题了,那么让我们来看看怎么用Matlab实现。 二、最短路径求解 2.1 稀疏矩阵 哦莫,果然上来就是…

c#获取对象的唯一标识_DDD领域驱动设计实战 - 创建实体身份标识的常用策略

从简单到复杂依次为:3.1.1 用户提供唯一标识这时用户将输入一些可识别的数值或符号,或从已有标识中选其一,然后创建实体对象。这是一种非常简单方案,但也可能变得复杂。由于需用户自己生成高质量的标识。所以标识可能唯一&#xf…

java - 计算距离和反弹

根据提示输入次数,控制台输出对应的距离和反弹的距离。 效果演示 代码展示 package com.one;import java.util.*; public class High {public static Scanner input new Scanner(System.in);public static void main(String[] args) {System.out.println("…

【youcans 的 OpenCV 例程200篇】139. 灰度顶帽变换校正阴影

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】139. 灰度顶帽变换校正阴影 灰度级形态学将形态学操作从二值图像扩展到灰度图像。灰度形态学处理也…

quartus管脚分配后需要保存吗_电脑磁盘显示未分配怎么办?磁盘数据如何恢复?...

磁盘未分配的这部分磁盘空间上没有任何分区,也就是说这部分空间无法用来保存数据。那么,什么原因会导致磁盘变成未分配呢?1、删除分区:在平时使用电脑的时候会有意或无意的将分区删除掉。磁盘上的分区被删除之后,在磁盘…

【youcans 的 OpenCV 例程200篇】140. 灰度底帽变换校正光照

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】140. 灰度底帽变换校正光照 灰度级形态学将形态学操作从二值图像扩展到灰度图像。灰度形态学处理也…

java - 条件嵌套

根据提示输入一个分数,程序会计算并输出你输入成绩所在的等级,利用条件运算符的嵌套来完成此分类表示:学习成绩> 90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示。 结果演示 代码演示 pack…

量化信噪比 非均匀量化_达尔优EM910牧马人轻量化游戏鼠标拆解评测

达尔优牧马人还真是一款经久不衰的模具,2012年推出至今,历经数次升级换代,已从最早期的“杀马特”风格变得硬核起来。为这一款中端定位的游戏鼠标,加入KBS按键衡力系统,也搭载有定制PMW3336光学传感器。然后机身配色设…

【youcans 的 OpenCV 例程200篇】141. 灰度底帽变换的三维地形图

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】141. 灰度底帽变换的三维地形图 5.3 灰度顶帽变换和灰度底帽运算 图像相减结合开运算和闭运算&am…

java - 水仙花数

经典的java程序练习,求水仙花数。 输出101-1000之间的所有水仙花数 水仙花数是指一个数各位上的数字的立方和等于该数本身 结果演示 代码演示 package com.two;public class Shuixianhua {public static void main(String[] args) {int num1, num2, num3;for(in…

【youcans 的 OpenCV 例程200篇】142. 基于灰度形态学的图像平滑

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】142. 基于灰度形态学的图像平滑 5.4 灰度形态学之图像平滑 由于开运算和闭运算对亮细节和暗细节的…

序列二次规划_最优控制与规划

(以下内容均来源于 CS 294 Lecture 8)首先我们假设环境是确定性的,即在某个状态执行某个动作之后,转移到的下一个状态是确定的,不存在任何随机性。而在这种情况下,我们想做的是在环境给了我们一个初始状态的…

java - 求a+aa+aaa+aa...a之和

求如 saaaaaaaaaaaa…a 之和,其中 a 是一个数字,根据提示输入个位数字和最高位数,计算并输出结果。 222222222222222(此时共有 5 个数相加),几个数相加由键盘控制 结果演示 代码演示 package com.two;import java.util.*;publ…

Go_defer详解

defer 1. 前言 defer语句用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。 为了方便描述,我们把创建defer的函数称为主函数,defer语句后面的函数称为延迟函数。 延迟函数可能有输入…

【youcans 的 OpenCV 例程200篇】143. 基于灰度形态学的粒度测定

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】143. 基于灰度形态学的粒度测定 5.5 灰度形态学之粒度分析 粒度测度是指确定图像中颗粒的大小分布…

无法自动进入并单步执行服务器_膳食纤维无法进入血液执行营养功能,吃它有啥用?...

膳食纤维是植物性食物中所含不能被人体吸收、消化分解利用的碳水化合物,包含纤维素、半纤维素、木质秦和果胶等物质。其中,膳食纤维根据其水溶性又可再分为可溶性和不可水溶性。可溶性膳食纤维包括果胶、藻胶、树胶和黏液,多存在于水果、海藻…

java - 求素数

求素数,求出设定范围内所有的素数并进行控制台输出,输出101-200之间的所有素数 素数曾称质数。一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数 结果演示 代码演示 package com.two; //输…