regress函数的最小二乘算法原理

得到一组数据时:

比如

产量 13.2 15.1 16.4 17.1 17.9 18.7 19.6 21.2 22.5 24.3

温度   20    25   30   35    40  45    50    55    60    65

要进行拟合,可以用matlab的regress函数

clear all;

x=[13.2 15.1 16.4 17.1 17.9 18.7 19.6 21.2 22.5 24.3]';

X=[ones(10,1) x];

Y=[20 25 30 35 40 45 50 55 60 65]';

[b,bint,r,rint,stats]=regress(Y,X)

rcoplot(r,rint)

z=b(1)+b(2)*x

plot(x,Y,'k+',x,z,'r')

最终得到:

产量=-39.4070+4.4036*温度

其实regress函数用到的是最小二乘算法

即假设在一个 2维坐标上,有很多个点,我们划一条线,直线满足:坐标上所有的点到直线上的距离和最小。

需要先计算拟合优度r:

代码实现:

p=0;

for i=1:10

p=p+x(i)*Y(i);

end

a=sum(p);

b=10*mean(x)*mean(Y);

fenzi=a-b;

c=0;

for i=1:10

c=c+x(i)*x(i)-mean(x)^2;

end

d=0;

for i=1:10

d=d+Y(i)*Y(i)-mean(Y)^2;

end

fenmu=sqrt(c*d);

r=fenzi/fenmu

得到r=0.9910,说明拟合效果非常好,通常大于0.7就可以用来预测。

设方程为y=a+bx

接下来就可以计算系数了

http://blog.csdn.net/marsjohn/article/details/54911788这里有详细的推导过程

也得到产量=-39.4070+4.4036*温度

与用regress函数所得结果相同

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容