一、一元线性回归
先放上一元线性回归方程的参数公式
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.7 67.9 68.7 77.5 95.9 137.4 155.0 175.0];
plot(x,y,'r*'); %做散点图
xlabel('x(职工工资总额)','fontsize',12); %横坐标名
ylabel('y(商品零售总额)','fontsize',12); %纵坐标名 参数3位设置标签字体大小
set(gca,'linewidth',2); %设置各轴线宽度
%采用最小二乘拟合
Lxx=sum((x-mean(x)).^2);
Lxy=sum((x-mean(x)).*(y-mean(y)));%mean为求平均数函数
b1=Lxy/Lxx;
b0=mean(y)-b1*mean(x);
y1=b1*x+b0;
hold on;%保持原图并接受此后绘制的新的曲线,叠加绘图
plot(x,y1,'linewidth',2);%参数4为设置线宽
m2=LinearModel.fit(x,y) %采用LinearModel.fit函数线性回归
%用regress函数回归
Y=y';
X=[ones(size(x,2),1),x'];
[b,bint,r,rint,s]=regress(Y,X);%Y为因变量的列向量,X为1列和x列向量组成的矩阵
执行结果:
LinearModel.fit函数
regress函数
至于具体返回的参数究竟有什么含义还在学习中
知识点:一元线性回归公式,plot函数的简单使用,set设置轴线,x(y)label设置标签,hold on、hold off的作用,两种回归函数,LinearModel.fit,regress。
二、一元非线性回归(此处暂指幂对函数)
先上练习代码
clc;clear;
x=[1.5,4.5,7.5,10.5,13.5,16.5,19.5,22.5,25.5];
y=[7,4.8,3.6,3.1,2.7,2.5,2.4,2.3,2.2];
plot(x,y,'*');%作散点图
set(gca,'linewidth',2);%设轴线
xlabel('销售额x/万元','fontsize',2);
ylabel('流通费率y/万元','fontsize',2);%设xy标签
%对数形式非线性回归
m1=@(b,x)b(1)+b(2)*log(x);%@表示匿名函数
nonlinfit1=fitnlm(x,y,m1,[0.01;0.01])%参数1为自变量,参数二为因变量,参数三为要拟合的函数模型,参数4为初值
b=nonlinfit1.Coefficients.Estimate;%取出估计参数
Y1=b(1)+b(2)*log(x);
hold on
plot(x,Y1,'--k','linewidth',2);%k为黑色,双横杠为虚线,单横杠为折线,做出拟合曲线
%指数形式非线性回归
m2=@(b,x)b(1)*x.^b(2);%也可写成m2='y~b1*x^b2'
nonlinfit2=fitnlm(x,y,m2,[1;1])
b=nonlinfit2.Coefficients.Estimate;
Y2=b(1)*x.^b(2);
hold on
plot(x,Y2,'r','linewidth',2)
legend('原始数据','a+b*log(x)','a*x^b')%添加图例
对数形式回归结果
指数形式回归结果
一个重要参数R-Squared为拟合的决定系数,该值越大,拟合越优,故采取指数形式拟合
知识点:
1.@的使用
①匿名函数
匿名函数是函数句柄的一种特殊用法,这里所得到的函数句柄变量不指向特定的函数(即不指向函数M文件中的函数名),而是指向一个函数表达式(具体表达式)。
语法如下:
变量名=@(输入参数列表)运算表达式;
如:
m=@(x,y)x+2*y
c=m(1,2)
执行结果为5
②函数句柄
语法如下:
变量名= @ 函数名;
@的作用就是将一个函数的函数句柄赋值给等号左边的变量。在调用函数时就可以调用该句柄,可以实现同样的功能。
如:
%定义函数b
function y = b(x1,x2)
y=x1+2*x2;
end
%通过函数句柄调用
g=@b;
g(1,3)
2.fitnlm函数的使用
3.fitnlm求得的模型的参数的调用:xxx(模型变量).Coefficients.Estimate
4.决定系数R-Squared
5.图例的添加:legend
其他参数的具体含义将在后期进一步学习