Matlab——回归分析

基础知识

  1. 函数ones(a,b)产生a行b列全1数组,ones(a)产生a行a列全1数组。zeros()同理。
  2. Y=y’, Y为y的转置矩阵。
  3. 函数size:获取数组的行数和列数
    (1)s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。
    (2)[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。
    (3)如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。
  4. x(i,:)代表第i的所有元素.x(:,i)代表的是第i列的所有元素.x([i:k],:)则代表X的i到k行的所有元素.如果只想单独要第i行和第j行的元素,x([i,j],:)。
1. 一元线性回归
clc, clear all, 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];
Y=y';
X=[ones(size(x,2),1),x'];
[b, bint, r, rint, s] = regress(Y, X)

注:
在以上回归程序中,使用了回归函数 regress。关于 regress,其用法多样,MATLAB 帮助中关于 regress 的用法,有以下几种:
b = regress(y,X)
[b,bint] = regress(y,X)
[b,bint,r] = regress(y,X)
[b,bint,r,rint] = regress(y,X)
[b,bint,r,rint,stats] = regress(y,X)
[…] = regress(y,X,alpha)
输入 y(因变量,列向量),X(1与自变量组成的矩阵)和(alpha,是显著性水平, 缺省时默认0.05)。
输出b是线性回归的系数(第一个是常数,第二个是一次项系数),bint 是 β0,β1 的置信区间,r 是残差(列向量),rint是残差的置信区间,s包含4个统计量:决定系数 R^2(相关系数为R),F 值,F(1,n-2) 分布大于 F 值的概率 p,剩余方差 s^2 的值。其意义和用法如下:R^2 的值越接近 1,变量的线性相关性越强,说明模型有效;如果满足
这里写图片描述

则认为变量y与x显著地有线性关系,其中 F1-α(1,n-2) 的值可查F分布表,或直接用 MATLAB 命令 finv(1-α,1, n-2) 计算得到;如果 p<α 表示线性模型可用。这三个值可以相互印证。s^2 的值主要用来比较模型是否有改进,其值越小说明模型精度越高。

简单来说,stats中的值,第一个值越接近1越好;第三个值越小越好,为0最好。

上面程序的输出为:


b =

  -23.5493
    2.7991


bint =

  -35.3165  -11.7822
    2.5350    3.0633


r =

   -1.6697
   -1.9064
   -3.2029
    0.7578
   -2.0810
    3.3600
   -1.4727
   13.1557
   -0.0346
   -6.9062


rint =

  -14.1095   10.7701
  -14.7237   10.9109
  -16.1305    9.7247
  -12.5148   14.0304
  -15.3118   11.1497
   -9.7162   16.4362
  -14.9630   12.0176
    7.2091   19.1024
  -11.9937   11.9245
  -14.7576    0.9453


s =

    0.9868  597.0543    0.0000   31.9768
2. 一元非线性回归

第一步,散点图画出来,观察是类似是什么模型。
第二步,matlab命令行输入 cftool,回车后打开曲线模拟工具箱。将数据填入x,y那里。
第三步,选择想要的曲线拟合函数。

· Custom Equations:用户自定义的函数类型
· Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
· Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
· Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
· Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving
· Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
· Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
· Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
· Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
· Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
· Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)

选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数;
——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。
第四步,多次拟合选择个最好的出来。评判标准:

  SSE: 255.8
  R-square: 0.9868

这里SSE越小越贴近,不过因题而异不一定要特别小。第二个R-square越接近1越好。

第四步,得到你想要的回归方程。

3. 多元回归

这里是一个多元线性回归,应用下面代码之前,应该保证y与每一个x都大概成线性的关系(画散点图)。这里主要描述回归,以上不做赘述。

clear all 
close all
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.5 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.0 5.5 7.0 6.0 3.5 4.9 4.3 8.0 5.0];
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];
n=24; m=3;
X=[ones(n,1),x1',x2',x3'];
[b,bint,r,rint,s]=regress(Y',X,0.05)

这里把regress函数的第三个参数显著值也写出来了,不写的话默认也是0.05。


b =

   18.0157
    1.0817
    0.3212
    1.2835


bint =

   13.9052   22.1262
    0.3900    1.7733
    0.2440    0.3984
    0.6691    1.8979


r =

    0.6781
    1.9129
   -0.1119
    3.3114
   -0.7424
    1.2459
   -2.1022
    1.9650
   -0.3193
    1.3466
    0.8691
   -3.2637
   -0.5115
   -1.1733
   -1.4910
   -0.2972
    0.1702
    0.5799
   -3.2856
    1.1368
   -0.8864
   -1.4646
    0.8032
    1.6301


rint =

   -2.7017    4.0580
   -1.6203    5.4461
   -3.6190    3.3951
    0.0498    6.5729
   -4.0560    2.5712
   -2.1800    4.6717
   -5.4947    1.2902
   -1.3231    5.2531
   -3.5894    2.9507
   -1.7678    4.4609
   -2.7146    4.4529
   -6.4090   -0.1183
   -3.6088    2.5859
   -4.7040    2.3575
   -4.8249    1.8429
   -3.7129    3.1185
   -3.0504    3.3907
   -2.8855    4.0453
   -6.2644   -0.3067
   -2.1893    4.4630
   -4.4002    2.6273
   -4.8991    1.9699
   -2.4872    4.0937
   -1.8351    5.0954


s =

    0.9106   67.9195    0.0000    3.0719
  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回归分析是一种统计分析方法,用于研究因变量与自变量之间的关系。在机器学习中,回归问题通常用于预测连续型的因变量。Matlab提供了多种回归分析算法和工具,可以帮助我们建立回归模型并进行预测。 以下是一种常见的回归分析算法——线性回归的实现步骤: 1. 模型定义:线性回归模型假设因变量与自变量之间存在线性关系。模型可以表示为:y = b0 + b1*x1 + b2*x2 + ... + bk*xk,其中y是因变量,x1, x2, ..., xk是自变量,b0, b1, b2, ..., bk是模型的系数。 2. 代价函数:为了评估模型的拟合程度,我们需要定义一个代价函数来衡量预测值与实际值之间的差异。常用的代价函数是均方误差(Mean Squared Error,MSE),它的计算公式是:MSE = (1/n) * Σ(yi - ŷi)^2,其中n是样本数量,yi是实际值,ŷi是预测值。 3. 梯度下降方法实现线性回归:梯度下降是一种优化算法,用于最小化代价函数。在线性回归中,我们通过不断调整模型的系数来降低代价函数的值。具体步骤如下: - 初始化模型的系数b0, b1, b2, ..., bk为0或随机值。 - 重复以下步骤直到收敛: - 计算预测值ŷi = b0 + b1*x1i + b2*x2i + ... + bk*xki。 - 计算误差ei = yi - ŷi。 - 更新模型的系数:b0 = b0 + α * ei,b1 = b1 + α * ei * x1i,b2 = b2 + α * ei * x2i,...,bk = bk + α * ei * xki,其中α是学习率(控制每次更新的步长)。 - 得到最终的模型系数。 4. 正规方程法:除了梯度下降方法,Matlab还提供了正规方程法来求解线性回归模型。正规方程法通过求解矩阵方程来直接得到模型的系数。具体步骤如下: - 构建设计矩阵X,其中每一行表示一个样本,每一列表示一个自变量。 - 构建响应向量y,其中每个元素表示对应样本的因变量。 - 使用正规方程求解线性方程组:X^T * X * b = X^T * y,其中b是模型的系数。 - 得到最终的模型系数。 以上是Matlab回归分析算法的简要介绍和实现步骤。根据具体的需求和数据特点,可以选择合适的算法和方法来进行回归分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值