您的位置:首页 > 编程语言 > MATLAB

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

2016-08-25 19:56 316 查看
      参考博客:  http://www.cnblogs.com/tornadomeet/archive/2013/03/15/2961660.html

% %%随机梯度下降
% clear all;
% x=load('./ex2Data/ex2x.dat');
% y=load('./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)';
% m=length(y);
% figure;
% %tt=power(x(:,1),2);
% plot(x,y,'o');
% ylabel('Height in meters');
% xlabel('Age in years');
% %%Gradient descent 这是批量梯度
% g=inline('1.0./(1.0+exp(-z))');
% x=[ones(m,1) power(x,1) ];%这是自变量
% theta=zeros(size(x(1,:)))'; %初始化,这里有两个系数,其实变量代表的是A
% MAX_ITR=1;%迭代次数
% alpha=0.002; %学习率 %之前这里为0.07,所以跑出去了。
% for num_iterations=1:MAX_ITR
% for i=1:m
% t=(g(x(i,:)*theta)-y(i));
% for j=1:size(x,2)
% grad=x(i,j)*t;
% theta(j,1)=theta(j,1)-alpha*grad; %随机梯度下降
% end
%
%
% end
% end
% hold on;
% %ttt=power(x(:,2),2);
% plot(x(:,2),power(x,1)*theta,'-');
% legend('Training data', 'Linear regression');%标出图像中各曲线标志所代表的意义
% hold off ;

%%批量梯度下降
clear all;
x=load('./ex2Data/ex2x.dat');
y=load('./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 这是批量梯度
n=1;
x=[ones(m,1) x];%这是自变量
theta=zeros(size(x(1,:)))'; %初始化,这里有两个系数,其实变量代表的是A

MAX_ITR=150000;%迭代次数
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);
plot(x(:,2),x*theta,'-');
legend('Training data', 'Linear regression');%标出图像中各曲线标志所代表的意义
hold off ;

% %%采用normal equations方法求解:
% x=load('./ex2Data/ex2x.dat');
% y=load('./ex2Data/ex2y.dat');
% plot(x,y,'*');
% xlabel('height');
% ylabel('age');
% %x = [ones(50,1),x];
% x = [ones(size(x,1),1),x]; %是指有个x^0 所以系数有两个
% w=inv(x'*x)*x'*y;
% hold on
% plot(x(:,2),x*w); %即 plot(x(:,2),0.0639*x(:,2)+0.7502)%更正后的代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 模式识别
相关文章推荐