模式识别与机器学习(3)

来源:互联网 发布:淘宝主播底薪一般多少 编辑:程序博客网 时间:2024/05/23 01:57

http://www.cnblogs.com/tornadomeet/archive/2013/03/15/2962116.html



%%批量梯度下降%%w我发现对于非线性变换,牛顿法挺好。已经不能把学习率固定了,一固定系数就跑出去。clear all;x=load('../Linear Regression/ex2Data/ex2x.dat');y=load('../Linear Regression/ex2Data/ex2y.dat');% x=[1.15 1.9 3.06 4.66 6.84 7.95 10,14,16]';% x=power(x,0.5);% y=power(x,0.5);%tt=power(x(:,1),2);m=length(y);        %原来是我的 散点画错了figure;plot(x,y,'o');ylabel('Height in meters');xlabel('Age in years');%%Gradient descent 这是批量梯度%x=[ones(m,1) x];%这是自变量x=[ones(length(x),1) ,x, x.^2 ];n=size(x,2)-1;theta=zeros(size(x(1,:)))';   %初始化,这里有两个系数,其实变量代表的是Axrange=linspace(min(x(:,2)),max(x(:,2)))';MAX_ITR=1500;%迭代次数   alpha=0.07; %学习率for num_iterations=1:MAX_ITR   %懂了上标是什么意思的,原来是指维度,即对于一个变量来说指取了    grad=(1/m)*x'*((x*theta)-y);%第几个实例,一般来说,一张图像是一个变量,图像的维度表示数据        for ii=1:(n+1)            for jj=1:(n+1)                H1(ii,jj) = sum( x(:, ii).*x(:,jj), 1)/m;%多个负号,按理是要负号的啊            end        end  %这个挺好,这样对应公式还是挺快的 。           theta=theta-inv(H1)*grad; %这是用牛顿法         %theta=theta-alpha *grad;     %换句话说,譬如这里的年龄是个变量,取了几个值,代表着维度。   %矩阵相乘就是求和了end                            hold on;%tt=power(x(:,2),2);yrange=[ones(size(xrange)),xrange,xrange.^2]*theta;plot(xrange,yrange,'-');legend('Training data', 'Linear regression');%标出图像中各曲线标志所代表的意义hold off ;


0 0
原创粉丝点击