Matlab中进行一元线性回归分析的方法


Matlab中实际上有多个函数可以实现回归分析的功能,如regress,polyfit,lsqcurvefit等。这里简单总结一下polyfit函数的用法:
 
polyfit函数基于最小二乘法,使用的基本格式为:

p = polyfit(x,y,n)
[p,S] = polyfit(x,y,n)
[p,S,mu] = polyfit(x,y,n)

其中每个命令中的n为多项式拟合的次数,当n为1时,即为一次拟合(很多情况下等价于一元线性回归)。p是n+1维参数向量p(1),p(2)….那么拟合后对应的多项式即为p(1)*x^n + p(2)*x^(n-1) +…+ p(n)*x + p(n+1)。S是规模为1×1的结构数组,包括R(系数矩阵的QR分解的上三角阵),df(自由度),normr(拟合误差平方和的算术平方根)。
 
求出p之后我们需要作出拟合函数,那么只需要使用命令:

f=polyval(p,x)

然后plot出x和f即可。另外需要强调一点的是,往往需要在回归分析的时候给出相关系数(correlation coefficient),实际上也很简单,我们可以使用命令:

r=corrcoef(x,y);

这样得到的r即为相关系数矩阵,其中r(1,2)=r(2,1)为相关系数,其值在[-1,1]之间,1表示最大程度的正相关,-1表示最大程度的负相关。相关系数绝对值越靠近1,线性相关性质越好,根据数据描点画出来的函数-自变量图线越趋近于一条平直线,拟合的直线与描点所得图线也更相近。
 
另外,转载两条使用polyfit的注意事项:
 
1. 使用polyfit命令进行多项式拟合时要注意的是,向量x(其中元素作为自变量)中不重复的元素个数m,和拟合阶数k需要满足m>=k+1.简单分析:k阶拟合需要确定k+1个未知参数(如1阶拟合y = ax + b需要确定a和b两个参数),故而至少需要k+1个方程,故而需要至少k+1个不同的已知数对(x,y),由于函数中x只能对应一个y,故而需要至少k+1个不同的x。
 
2. polyfit只适合于形如y = a[k]*x^k + a[k-1]*x^(k-1) + …. + a[1]*x + a[0]的完全的一元多项式的数据拟合。
 
最后贴一张很简单的拟合结果图:

推荐阅读:

Matlab与C/C++联合编程之从Matlab调用C/C++代码

二分类SVM方法Matlab实现

相关内容