模式识别与机器学习(5)
2016-08-25 20:02
323 查看
http://www.cnblogs.com/tornadomeet/archive/2013/03/17/2964515.html
logistic_regu.m
clear;
figure;
addpath('./ex5Data');
x=load('./ex5Data/ex5Logx.dat');
y=load('./ex5Data/ex5Logy.dat');
%画出数据的分布图
plot(x(find(y),1),x(find(y),2),'o','MarkerFaceColor','b');
hold on;
plot(x(find(y==0),1),x(find(y==0),2),'r+');
legend('y=1','y=0');
x = map_feature(x(:,1), x(:,2)); %用高维,因为画的不是直线而是弯的,像这里就是圆
[m, n] = size(x);
theta = zeros(n, 1);
g = inline('1.0 ./ (1.0 + exp(-z))');
% setup for Newton's method
MAX_ITR = 15;
J = zeros(MAX_ITR, 1);
lambda = 1;%lambda=0,1,10
%牛顿法
for i=1:MAX_ITR
z=x*theta;
h=g(z);
J(i)=(1/m)*sum(-y.*log(h)-(1-y).*log(1-h))+...
(lambda/(2*m))*norm(theta)^2;
G = (lambda/m).*theta;G(1) = 0 ;%这样不管什么时候,都能保证首项是正确的
L = (lambda/m).*eye(n); L(1) = 0;
grad = ((1/m).*x' * (h-y)) + G;
H = ((1/m).*x' * diag(h) * diag(1-h) * x) + L;
theta = theta - H\grad;
%计算一阶导和2阶导
end
u = linspace(-1, 1.5, 200);
v = linspace(-1, 1.5, 200);
z1 = zeros(length(u), length(v));
for i = 1:length(u)
for j = 1:length(v)
z1(i,j) = map_feature(u(i), v(j))*theta;%这里绘制的并不是损失函数与迭代次数之间的曲线,而是线性变换后的值
end
end
z1 = z1';
%下面画的是z1=0 的时候,也就是变量u v,取值的时候,z1为0,然后也就是等高线了。
contour(u, v, z1,[0,0], 'LineWidth', 2)%在z上画出为0值时的界面,因为为0时刚好概率为0.5,符合要求
legend('y = 1', 'y = 0', 'Decision boundary')
title(sprintf('\\lambda = %g', lambda), 'FontSize', 14);
hold off;
clear; %x=load('./ex5Data/ex5Linx.dat'); %y=load('./ex5Data/ex5Liny.dat'); x=load('../Linear Regression/ex2Data/ex2x.dat'); y=load('../Linear Regression/ex2Data/ex2y.dat'); plot(x,y,'o','MarkerEdgeColor','b','MarkerFaceColor','r'); x=[ones(length(x),1) ,x, x.^2, x.^3 ,x.^4,x.^5]; %这就是多项式模拟么?之前找了半天,不知怎么做的 [m, n]=size(x); n=n-1; %计算参数sidta,并且绘制出拟合曲线 rm=diag([0;ones(n,1)]); %lamda后面的矩阵 lamda=[0 1 10]; colortype={'g','b','r'}; sida=zeros(n+1,3); %其实3个参数一起求了 %线性空间生成100个数 xrange=linspace(min(x(:,2)),max(x(:,2)))'; hold on; for i=1:3 sida(:,i)=inv(x'*x+lamda(i).*rm)*x'*y; norm_sida=norm(sida); yrange=[ones(size(xrange)),xrange,xrange.^2,xrange.^3,... xrange.^4,xrange.^5]*sida(:,i); plot(xrange,yrange,char(colortype(i))); hold on; end legend('traning data', '\lambda=0', '\lambda=1','\lambda=10')%注意转义字符的使用方法 hold off;
logistic_regu.m
clear;
figure;
addpath('./ex5Data');
x=load('./ex5Data/ex5Logx.dat');
y=load('./ex5Data/ex5Logy.dat');
%画出数据的分布图
plot(x(find(y),1),x(find(y),2),'o','MarkerFaceColor','b');
hold on;
plot(x(find(y==0),1),x(find(y==0),2),'r+');
legend('y=1','y=0');
x = map_feature(x(:,1), x(:,2)); %用高维,因为画的不是直线而是弯的,像这里就是圆
[m, n] = size(x);
theta = zeros(n, 1);
g = inline('1.0 ./ (1.0 + exp(-z))');
% setup for Newton's method
MAX_ITR = 15;
J = zeros(MAX_ITR, 1);
lambda = 1;%lambda=0,1,10
%牛顿法
for i=1:MAX_ITR
z=x*theta;
h=g(z);
J(i)=(1/m)*sum(-y.*log(h)-(1-y).*log(1-h))+...
(lambda/(2*m))*norm(theta)^2;
G = (lambda/m).*theta;G(1) = 0 ;%这样不管什么时候,都能保证首项是正确的
L = (lambda/m).*eye(n); L(1) = 0;
grad = ((1/m).*x' * (h-y)) + G;
H = ((1/m).*x' * diag(h) * diag(1-h) * x) + L;
theta = theta - H\grad;
%计算一阶导和2阶导
end
u = linspace(-1, 1.5, 200);
v = linspace(-1, 1.5, 200);
z1 = zeros(length(u), length(v));
for i = 1:length(u)
for j = 1:length(v)
z1(i,j) = map_feature(u(i), v(j))*theta;%这里绘制的并不是损失函数与迭代次数之间的曲线,而是线性变换后的值
end
end
z1 = z1';
%下面画的是z1=0 的时候,也就是变量u v,取值的时候,z1为0,然后也就是等高线了。
contour(u, v, z1,[0,0], 'LineWidth', 2)%在z上画出为0值时的界面,因为为0时刚好概率为0.5,符合要求
legend('y = 1', 'y = 0', 'Decision boundary')
title(sprintf('\\lambda = %g', lambda), 'FontSize', 14);
hold off;
相关文章推荐
- 思考一个模式识别与机器学习相关的问题
- 模式识别与机器学习
- 模式识别,计算机视觉,计算机图形学,智能控制,信号处理,语音识别,知识处理,机器学习,数据挖掘领域区别
- 模式识别和机器学习、数据挖掘的区别与联系(转发)
- 模式识别与机器学习---读书笔记之多项式曲线拟合
- 模式识别与机器学习的简介
- 模式识别和机器学习中的概率知识
- 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning (PRML),章节1.2,Probability Theory (下)
- 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning (PRML),章节1.2,Probability Theory (下)
- 机器学习模式识别数据挖掘数据集下载链接
- 模式识别与机器学习基础之1-一个简单的回归问题(regression problem)
- 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning 书,章节1.1,多项式曲线拟合(Polynomial Curve Fitting)
- 模式识别与机器学习的简介
- 模式识别、机器学习和数据挖掘的区别与联系 [整理自网络]
- 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning (PRML)书,章节1.2,Probability Theory (上)
- 模式识别与机器学习
- 模式识别和机器学习 笔记
- 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning 书,章节1.1,多项式曲线拟合(Polynomial Curve Fitting)
- 模式识别、计算机视觉、机器学习领域的顶级期刊和会议(整理)
- 机器学习模式识别数据挖掘数据集下载链接