MatLab之回归(脚本)

以数据为基础而建立数学模型的方法称为数据建模方法, 包括回归、统计、机器学习、深度学习、灰色预测、主成分分析、神经网络、时间序列分析等方法, 其中最常用的方法还是回归方法

目录

一元线性回归

LinearModel.fit 函数进行线性回归

 LinearModel.fit 函数的说明:

regress 函数进行回归

一元非线性回归

多元回归

逐步回归

 Logistic 回归


一元线性回归

要确定是线性还是非线性,然后就可以利用对应的回归方法建立它们之间的回归模型

clear;clc;close all;
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];
%首先用散点图对数据关系进行判断
figure;
plot(x,y,'Or');
title('关系趋势图');
xlabel('职工工资');
ylabel('商品销售额');
hold on;

%最小二乘法
Lxx=sum((x-mean(x)).^2);
Lxy=sum((x-mean(x)).*(y-mean(y)));
a=Lxy/Lxx;
b=mean(y)-mean(x)*a;
y1= a*x+b;
plot(x,y1,'b');
if(b>=0)
 str=sprintf('该数据的回归函数为y=%fx+%f',a,b);
else
 str=sprintf('该数据的回归函数为y=%fx%f',a,b);
end
disp(str);

最后结果如下图所示: 

 

LinearModel.fit 函数进行线性回归

clear;clc;close all;
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];
m=LinearModel.fit(x,y);
m.plot();
disp(m);
%函数 LinearModel.fit 输出的内容为典型的线性回归的参数

 LinearModel.fit 函数的说明:

m=LinearModel.fit(X,Y)

创建线性回归模型,X、Y是对应数据。注意这里 X 不要加全1的系数。

m.plot

绘制 wlb 回归模型的效果图

regress 函数进行回归

Y=y';
X=[ones(size(x,2),1),x'];
[b,bint,r,rint,s]=regress(Y,X);
disp(b)

具体信息可以参考文档。

b是估计参数,bint是估计参数的置信区间,r是残差项,rint是残差的置信区间,s包含4个统计量:决定系数 R^2(相关系数为R),F 值,F(1,n-2) 分布大于 F 值的概率 p,剩余方差 s^2 的值。

 在以上回归程序中,使用了两个回归函数 LinearModel.fit 和 regress。在实际使用中,只要根据自己的需要选用一种就可以了。

一元非线性回归

为了得到 x 与 y 之间的关系,先绘制出它们之间的散点图

clear;clc;close all;
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];
plot(x,y,'*r');
xlabel('X轴');
ylabel('Y轴');

 

 由该图可以判断它们之间的关系近似为对数关系或指数关系,为此可以利用这两种函数形式进行非线性拟合。

%对数形式非线性回归
m1=@(b,x)b(1)+b(2)*log(x);
nonlinfit1=fitnlm(x,y,m1,[0.01,0.01])
b=nonlinfit1.Coefficients.Estimate;
Y1=b(1,1)+b(2,1)*log(x);
hold on;
plot(x,Y1,'--k');

%指数形式非线性回归
m2 = 'y ~ b1*x^b2';
nonlinfit2 = fitnlm(x,y,m2,[0.01;0.01])
b1=nonlinfit2.Coefficients.Estimate(1,1);
b2=nonlinfit2.Coefficients.Estimate(2,1);
Y2=b1*x.^b2;
hold on
plot(x,Y2,'r');

 (细节还不太懂。。。)

多元回归

能否应用多元线性回归,最好先通过数据可视化判断他们之间的变化趋势,如果近似满足线性关系,则可以执行利用多元线性回归方法对该问题进行回归。具体步骤如下:

(1)作出因变量 Y 与各自变量的样本散点图

作散点图的目的主要是观察因变量 Y 与各自变量间是否有比较好的线性关系

(2)进行多元线性回归

(3)由结果对模型进行判断

        1)相关系数 R 的评价:本例 R 的绝对值为 0.9542 ,表明线性相关性较强。

        2)F 检验法:当 F > F1-α(m,n-m-1) ,即认为因变量 y 与自变量 x1,x2,...,xm 之间有显著的线性相关关系;否则认为因变量 y 与自变量 x1,x2,...,xm 之间线性相关关系不显著。本例 F=67.919 > F1-0.05( 3,20 ) = 3.10。

        3)p 值检验:若 p < α(α 为预定显著水平),则说明因变量 y 与自变量 x1,x2,...,xm之间显著地有线性相关关系。本例输出结果,p<0.0001,显然满足 p<α=0.05。

以上三种统计推断方法推断的结果是一致的,说明因变量 y 与自变量之间显著地有线性相关关系,所得线性回归模型可用。s^2 当然越小越好,这主要在模型改进时作为参考。

逐步回归

例题:

Hald 数据是关于水泥生产的数据。某种水泥在凝固时放出的热量 Y(单位:卡/克)与水泥中 4 种化学成品所占的百分比有关:

图片

在生产中测得 12 组数据,见表5,试建立 Y 关于这些因子的“最优”回归方程。

表5 水泥生产的数据

图片

对于例 4 中的问题,可以使用多元线性回归、多元多项式回归,但也可以考虑使用逐步回归。从逐步回归的原理来看,逐步回归是以上两种回归方法的结合,可以自动使得方程的因子设置最合理。对于该问题,逐步回归的代码如下:

X=[7,26,6,60;1,29,15,52;11,56,8,20;11,31,8,47;7,52,6,33;11,55,9,22;3,71,17,6;1,31,22,44;2,54,18,22;21,47,4,26;1,40,23,34;11,66,9,12];   %自变量数据
Y=[78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,93.1,115.9,83.8,113.3];  %因变量数据
Stepwise(X,Y,[1,2,3,4],0.05,0.10)% in=[1,2,3,4]表示X1、X2、X3、X4均保留在模型中

 Logistic 回归

例题:

Logistic在2020年国赛C题的优秀论文中多次出现,也是类似的银行贷款问题。

企业到金融商业机构贷款,金融商业机构需要对企业进行评估。评估结果为 0 , 1 两种形式,0 表示企业两年后破产,将拒绝贷款,而 1 表示企业 2 年后具备还款能力,可以贷款。在表 6 中,已知前 20 家企业的三项评价指标值和评估结果,试建立模型对其他 5 家企业(企业 21-25)进行评估。

表6 企业还款能力评价表

图片

% logistic回归Matlab实现程序

%% 数据准备
clc, clear, close all
X0=xlsread('logistic_ex1.xlsx', 'A2:C21'); % 回归模型的输入
Y0=xlsread('logistic_ex1.xlsx', 'D2:D21'); % 回归模型的输出
X1=xlsread('logistic_ex1.xlsx', 'A2:C26'); % 预测数据输入

%% logistics函数
GM = fitglm(X0,Y0,'Distribution','binomial');
Y1 = predict(GM,X1);

%% 模型的评估
N0 =1:size(Y0,1); 
N1= 1:size(Y1,1);
plot(N0', Y0, '-kd');
hold on; 
scatter(N1', Y1, 'b')
xlabel('数据点编号');
ylabel('输出值');

 参考博客:

https://blog.csdn.net/qq_43575267/article/details/94513202

https://mp.weixin.qq.com/s/OKXa3F3PkmFf1c90-t3AIg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值