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

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,:)))';   %初始化,这里有两个系数,其实变量代表的是A
xrange=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 ;


猜你喜欢

转载自blog.csdn.net/snailyww/article/details/52317728