当前位置:首页 > Parzen窗估计与KN近邻估计实验报告 - 图文
end
if nargin==3 for q = 1:zt
wt = [wt; w(:,:,q)]; [xt,yt] = size(wt); end
for i = 1:xt
dist(i) = norm(x - wt(i,:)); end
t = sort(dist); % 欧氏距离排序 [a,b] = size(t);
m = find(dist <= t(k+1)); % 找到k个最近邻的编号
num1 = length(find(m>0 & m<11)); num2 = length(find(m>10 & m<21)); num3 = length(find(m>20 & m<31)); if yt == 3
plot3(w(:,1,1),w(:,2,1),w(:,3,1), 'r.'); hold on; grid on;
plot3(w(:,1,2),w(:,2,2),w(:,3,2), 'g.'); plot3(w(:,1,3),w(:,2,3),w(:,3,3), 'b.');
if (num1 > num2) || (num1 > num3)
plot3(x(1,1),x(1,2),x(1,3), 'ro');
disp(['点:[',num2str(x),']属于第一类']); elseif (num2 > num1) || (num2 > num3) plot3(x(1,1),x(1,2),x(1,3), 'go');
disp(['点:[',num2str(x),']属于第二类']); elseif (num3 > num1) || (num3 > num2) plot3(x(1,1),x(1,2),x(1,3), 'bo');
disp(['点:[',num2str(x),']属于第三类']); else
disp('无法分类'); end end
if yt == 2
plot(w(:,1,1),w(:,2,1), 'r.'); hold on; grid on;
plot(w(:,1,2),w(:,2,2), 'g.');
plot(w(:,1,3),w(:,2,3), 'b.');
if (num1 > num2) || (num1 > num3) plot(x(1,1),x(1,2), 'ro');
disp(['点:[',num2str(x),']属于第一类']); elseif (num2 > num1) || (num2 > num3) plot(x(1,1),x(1,2), 'go');
disp(['点:[',num2str(x),']属于第二类']); elseif (num3 > num1) || (num3 > num2) plot(x(1,1),x(1,2), 'bo');
disp(['点:[',num2str(x),']属于第三类']); else
disp('无法分类'); end end end
title('k-最近邻分类器'); legend('第一类数据',... '第二类数据',... '第三类数据',... '测试样本点');
clear;
close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Parzen窗估计和k最近邻估计
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% w1(:,:,1) = [ 0.28 1.31 -6.2; 0.07 0.58 -0.78; 1.54 2.01 -1.63; -0.44 1.18 -4.32; -0.81 0.21 5.73; 1.52 3.16 2.77; 2.20 2.42 -0.19; 0.91 1.94 6.21; 0.65 1.93 4.38; -0.26 0.82 -0.96];
w1(:,:,2) = [0.011 1.03 -0.21; 1.27 1.28 0.08; 0.13 3.12 0.16; -0.21 1.23 -0.11; -2.18 1.39 -0.19;
0.34 1.96 -0.16; -1.38 0.94 0.45; -0.12 0.82 0.17; -1.44 2.31 0.14; 0.26 1.94 0.08];
w1(:,:,3) = [ 1.36 2.17 0.14; 1.41 1.45 -0.38; 1.22 0.99 0.69; 2.46 2.19 1.31; 0.68 0.79 0.87; 2.51 3.22 1.35; 0.60 2.44 0.92; 0.64 0.13 0.97; 0.85 0.58 0.99; 0.66 0.51 0.88];
x(1,:) = [0.5 1 0];
x(2,:) = [0.31 1.51 -0.5]; x(3,:) = [-0.3 0.44 -0.1];
% 验证h的二维数据
w2(:,:,1) = [ 0.28 1.31 ; 0.07 0.58 ; 1.54 2.01 ; -0.44 1.18 ; -0.81 0.21 ; 1.52 3.16 ; 2.20 2.42 ; 0.91 1.94 ; 0.65 1.93 ; -0.26 0.82 ];
w2(:,:,2) = [0.011 1.03 ; 1.27 1.28 ; 0.13 3.12 ; -0.21 1.23 ; -2.18 1.39 ; 0.34 1.96 ; -1.38 0.94 ; -0.12 0.82 ; -1.44 2.31 ; 0.26 1.94 ];
w2(:,:,3) = [1.36 2.17 ; 1.41 1.45 ; 1.22 0.99 ; 2.46 2.19 ; 0.68 0.79 ; 2.51 3.22 ; 0.60 2.44 ; 0.64 0.13 ; 0.85 0.58 ; 0.66 0.51 ];
y(1,:) = [0.5 1]; y(2,:) = [0.31 1.51]; y(3,:) = [-0.3 0.44];
h = .1; % 重要参数
p = Parzen(w1,x(1,:),h); num = find(p == max(p));
disp(['点:[',num2str(x(1,:)),']落在三个类别的概率分别为:',num2str(p)]);
disp(['点:[',num2str(x(1,:)),']落在第',num2str(num),'类']);
% 给定三类二维样本,画出二维正态概率密度曲面图验证h的作用 num =1; % 第num类的二维正态概率密度曲面图,取值为1,2,3 draw(w2,h,num);
str1='当h=';str2=num2str(h);str3='时的二维正态概率密度曲面'; SC = [str1,str2,str3]; title(SC);
% k近邻算法设计的分类器 % x1和y1为测试样本 x1 = [-0.41,0.82,0.88]; x2 = [0.14,0.72, 4.1]; x3 = [-0.81,0.61,-0.38]; y(1,:) = [0.5 1]; y(2,:) = [0.31 1.51]; y(3,:) = [-0.3 0.44]; w = w1;
%w = w1(:,1,3); k = 5;
kNearestNeighbor(w,k,x1); kNearestNeighbor(w,k,x2); kNearestNeighbor(w,k,x3);
共分享92篇相关文档