标签:
程序文件 study2.m
function study2() count=7; n=1; %X=[1 2 3 4 5 4.2 6 7 8]‘; %Y=[5,4,5,4.5,5,6,6 4 3]‘; X=1:10; Y=rand(1,10)*100; sita=rand(n,1); overvalue=-1; count=0; b=(max(Y)+min(Y))/2; %%假设函数为 h(x)=sita*x+b while 8<(J=calJ())&&(abs(J-overvalue)>0.0001) study(); overvalue=J; count=count+1; draw(); sleep(0.01) endwhile count draw(); function ans=calJ() ans=sum((X*sita+b-Y).^2)/2; endfunction function study() sita=sita-0.003*sum((X*sita+b-Y).*X); endfunction function draw() hold off plot(X,Y,‘*‘); hold on tempx=linspace(0,max(X)*5/4,3); tempy=tempx*sita+b; plot(tempx,tempy); endfunction endfunction
执行过程如下所示
一个简单的学习算法,其中学习速度选取很关键,就是子函数study中0.003代表的意思,如果选取过大会发现曲线震荡发散不收敛,选取过小学习时间太长。决定了整个系统学习的效率。
上图演示的时候我将sita=zeros(n,1)了,因为要有一个好的动画效果 -_-! ,开头代码中所用的随机数实际效果更好。
标签:
原文地址:http://my.oschina.net/000quanwei/blog/506202