一元回归就是只有一个未知量,一个因变量,形如y=a*x+b的一次函数,已知数据x与y,去求解一次直线的系数a与b,令数据与一次直线的误差最小。
根据已有的散点数据,画图展示数据的分布,看看是否能发现一些规律,其中用到plot函数(也可使用scatter函数),进行绘图
clear all
clc
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
for i=1:10
plot(x(i),y(i),'or');
hold on
end
xlabel('x');
ylabel('y');
数据的绘图为
由图可分析,数据并不是简单的一次线性关系,看起来像指数分布,因此我们取ln(y)与x的关系进行绘图再看看
clear all
clc
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
z=zeros(size(y));
N=length(y);
hold on
for i =1:N
z(i)=log(y(i));
plot(x(i),z(i),'ok');
end
xlabel('x');
ylabel('y');
返回的图片为
大致符合一次直线了,因此我们取新的变量z=ln(y),求解z=a*x+b的系数
clear all
clc
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
z=zeros(size(y));
N=length(y);
for i =1:N
z(i)=log(y(i));
end
[p,s]=polyfit(x,z,1)
如果是形如y=a1x1+a2x2+…+an*xn+b的多元函数,就不能再使用polyfit一次拟合了,就要用到regress进行多元拟合
调用格式为
[b,bint,r,rint,stats]=regress(y,x,alpha)
),x1',x2',x3',x4'];
[b,bint,r,rint,stats]=regress(y,x)