MATLAB常用的数据建模方法
数据建模方法包括回归、统计、机器学习、深度学习、灰色预测、主成分分析、神经网络、时间序列分析等方法,其中最常用的方法还是回归方法。
一元回归
一元线性回归
最小二乘法:
% 采用最小二乘拟合
Lxx=sum((x-mean(x)).^2);
Lxy=sum((x-mean(x)).*(y-mean(y)));
b1=Lxy/Lxx;
b0=mean(y)-b1*mean(x);
y1=b1*x+b0;

LinearModel.fit函数进行回归:
m2 = LinearModel.fit(x,y)
输出如下:
m2 =
线性回归模型:
y ~ 1 + x1估计系数:
Estimate SE tStat pValue
________ _______ ______ __________(Intercept) -23.549 5.1028 -4.615 0.0017215
x1 2.7991 0.11456 24.435 8.4014e-09观测值数目: 10,误差自由度: 8
均方根误差: 5.65
R 方: 0.987,调整 R 方 0.985
F 统计量(常量模型): 597,p 值 = 8.4e-09regress函数进行回归:
Y=y'; % 1*10-->10*1 X=[ones(size(x,2),1),x']; [b, bint, r, rint, s] = regress(Y, X)
单引号表示对前面的变量进行转置。
regress函数要计算具有常数项(截距)的模型的系数估计值,需要在矩阵 X 中包含一个由 1 构成的列。
输出如下:
b =
-23.5493
2.7991
一元非线性回归
待回归数据:

%% 对数形式
m1 = @(b,x) b(1) + b(2)*log(x); % m1为函数句柄,@是定义句柄的运算符。相当于建立了一个函数文件:
% m1.m
% function y=f(b,x)
% y=b(1) + b(2)*log(x);
nonlinfit1 = fitnlm(x,y,m1,[0.01;0.01]) % beta0 = [0.01;0.01]为非线性模型的系数,指定为数值向量。非线性模型从beta0开始搜索最佳系数。
b=nonlinfit1.Coefficients.Estimate; % 获取拟合的估计值
Y1=b(1,1)+b(2,1)*log(x);
hold on
plot(x,Y1,'--k','linewidth',2)
nonlinfit1 =
非线性回归模型:
y ~ b1 + b2*log(x)估计系数:
Estimate SE tStat pValue
________ _______ _______ __________b1 7.3979 0.26667 27.742 2.0303e-08
b2 -1.713 0.10724 -15.974 9.1465e-07观测值数目: 9,误差自由度: 7
均方根误差: 0.276
R 方: 0.973,调整 R 方 0.969
F 统计量(常量模型): 255,p 值 = 9.15e-07

%% 指数形式拟合
m2 = 'y ~ b1*x^b2';
nonlinfit2 = fitnlm(x,y,m2,[1;1])
b1=nonlinfit2.Coefficients.Estimate(1,1);
b2=nonlinfit2.Coefficients.Estimate(2,1);
Y2=b1*x.^b2;
hold on
plot(x,Y2,'r','linewidth',2)
legend('原始数据','a+b*lnx','a*x^b')
mdl = fitnlm(X,y,modelfun,beta0)
modelfun
: function handle | character vector or string scalar formula in the formy ~ f*(b1,b2,...,bj,x1,x2,...,xk)
nonlinfit2 =
非线性回归模型:
y ~ b1*x^b2估计系数:
Estimate SE tStat pValue
________ ________ _______ __________b1 8.4112 0.19176 43.862 8.3606e-10
b2 -0.41893 0.012382 -33.834 5.1061e-09观测值数目: 9,误差自由度: 7
均方根误差: 0.143
R 方: 0.993,调整 R 方 0.992
F 统计量(零模型): 3.05e+03,p 值 = 5.1e-11

在这个案例中,比较两种回归模型,两者决定系数R分别为0.973和0.993,后者优于前者,可认为指数形式的函数形式更符合y和x之间的关系。
多元回归
一般步骤:
- 作因变量Y与各自自变量的样本散点图:判断是否具备一定的关系,能否进行回归,并选择恰当的数学模型形式。
- 进行多元回归:可直接使用
regress
函数进行多元线性回归。
逐步回归
逐步回归原理是多元回归和多元多项式回归的结合,可以自动使方程的因子设置为最合理,能够摒弃一些低贡献的因子。
Stepwise
函数:
stepwise(X,y,inmodel,penter,premove)
通过函数提供的一个图形化操作界面进行逐步回归操作。
Logistic回归
Logistic回归模型适用条件:
-
因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。
-
残差和因变量都要服从二项分布。
-
自变量和Logistic概率是线性关系
-
各观测对象间相互独立。
案例:
题目:如下表,已知表中前20家企业的三项评价指标值和评价结果,试建立模型对余下的5家企业进行评估。

%% 数据准备
clear all
clc
X0=xlsread('logistic_ex1.xlsx', 'A2:C21'); % 回归数据X值
XE=xlsread('logistic_ex1.xlsx', 'A2:C26'); % 验证与预测数据
Y0=xlsread('logistic_ex1.xlsx', 'D2:D21'); % 回归数据P值
%% 数据转化和参数回归
n=size(Y0,1);
for i=1:n
if Y0(i)==0
Y1(i,1)=0.25;
else
Y1(i,1)=0.75;
end
end
X1=ones(size(X0,1),1); % 构建常数项系数
X=[X1, X0];
Y=log(Y1./(1-Y1));
b=regress(Y,X);
多元回归结果如下:
b =
-0.6366
0.0041
0.0163
0.5330
%% 模型验证和应用
for i=1:size(XE,1)
Pai0=exp(b(1)+b(2)*XE(i,1)+b(3)*XE(i,2)+b(4)*XE(i,3))/(1+exp(b(1)+b(2)*XE(i,1)+b(3)*XE(i,2)+b(4)*XE(i,3)));
if Pai0<=0.5
P(i)=0;
else
P(i)=1;
end
end
num2str(P) % 查看预测结果
'0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
0 0 1 1 1
’