[模式分类] Parzen窗概率密度估计与Kn近邻概率密度估计

4.3.2 考虑到对于表格中的数据进行Parzen窗估计和设计分类器。窗函数为一个球形的高斯函数,如下所示:
φ((xxi)/h)exp[(xxi)t(xxi)/(2h2)]

(a)编写程序,使用Parzen窗估计方法对任意一个的测试样本点x进行分类。对分类器的训练则使用表格中的三维数据。同时令h=1,分类样本点为为 (0.51.00.0)t , (0.311.510.50)t , (0.30.440.1)t .
(b)现在我们令h=0.1,重复(a).

parzen.m

%生成函数计算样本个数kn的表达式
%使用可球型的高斯函数作为窗函数,并令hn=1,
%a为使用三维数据,h为超立方体的边长,x为测试样本
function px = parzen(a, h, x)
hn = h;
[m, n] = size(a);            %返回m为样本的个数,m为行,n为列
vn = 4 * pi * h^3 / 3;       %求出rn空间的体积vn
px = 0;
for i = 1:m
    % px为概率密度函数
    px = px + exp((-(x-a(i,:))*(x-a(i,:))') / (2 * power(hn, 2))) / (vn); 
end
px = px / m;
end

testParzen.m

%用于进行上机题4-3
clear
load('w1.mat');
load('w2.mat');
load('w3.mat');

%完成4-3第二题
x1=[0.5,1.0,0.0];
x2=[0.31,1.51,-0.50];
x3=[-0.3,0.44,-0.1];
p1=[];
p2=[];
p3=[];
h1=1;
p11=parzen(w1,h1,x1);
p12=parzen(w2,h1,x1);
p13=parzen(w3,h1,x1);
% 将每一个类别算出的概率放在一起
p1=[p11,p12,p13];
% find函数用于返回所需元素的所在位置
% n1,n2,n3返回的是最大概率的值,则表明样本属于那个类                
n1=find(p1==max(p1));           

p21=parzen(w1,h1,x2);
p22=parzen(w2,h1,x2);
p23=parzen(w3,h1,x2);
p2=[p21,p22,p23];
n2=find(p2==max(p2));

p31=parzen(w1,h1,x3);
p32=parzen(w2,h1,x3);
p33=parzen(w3,h1,x3);
p3=[p31,p32,p33];
n3=find(p3==max(p3));

disp('当h=1时');
%disp(p1);
disp(['样本点1 [ ',num2str(x1),' ] 落在类别 ',num2str(n1),' 中']);
disp(['样本点2 [ ',num2str(x2),' ] 落在类别 ',num2str(n2),' 中']);
disp(['样本点3 [ ',num2str(x3),' ] 落在类别 ',num2str(n3),' 中']);

%完成4-3第二题
h2=0.1;
k1=[];
k2=[];
k3=[];
k11=parzen(w1,h2,x1);
k12=parzen(w2,h2,x1);
k13=parzen(w3,h2,x1);
k1=[k11,k12,k13];                %将每一个类别算出的概率放在一起
m1=find(k1==max(k1));            %find函数用于返回所需元素的所在位置
                                 %n1,n2,n3返回的是最大概率的值,则表明样本属于那个类
k21=parzen(w1,h2,x2);
k22=parzen(w2,h2,x2);
k23=parzen(w3,h2,x2);
k2=[k21,k22,k23];
m2=find(k2==max(k2));

k31=parzen(w1,h2,x3);
k32=parzen(w2,h2,x3);
k33=parzen(w3,h2,x3);
k3=[k31,k32,k33];
m3=find(k3==max(k3));

disp('当h=0.1时')
%p(k1);
disp(['样本点1 [ ',num2str(x1),' ] 落在类别 ',num2str(m1),' 中']);
disp(['样本点2 [ ',num2str(x2),' ] 落在类别 ',num2str(m2),' 中']);
disp(['样本点3 [ ',num2str(x3),' ] 落在类别 ',num2str(m3),' 中']);

clear                            %清除所有变量

4.3.3考虑不同维数的空间中,使用k-近邻概率密度估计方法的效果。
(a)编写程序,对于一维的情况,当有n个数据样本点时,进行k-近邻概率密度估计。对表格中的类别 w3 中的特征 x1 ,用程序画出当k=1,3,5时的概率密度估计结果。
(b)编写程序,对于二维的情况,当有n个数据样本点时,进行k-近邻概率密度估计。对表格中的类别 w2 中的特征 (x1,x2)t ,用程序画出当k=1,3,5时的概率密度估计结果。

kneighbor.m

%使用kn近邻概率密度估计方法,分别对一维,二维,三维的数据进行估计
%k为参数,a为样本
%测试数据为一维
function px = kneighbor(a, kn, x)
[m, n] = size(a);
b = x;
N = 100;
if n == 1                             %当为一维向量时
    px = zeros(N,1);
    vn1 = zeros(N,1);
    for i = 1:N
        for j = 1:m
            vn1(j) = abs(b(i) - a(j));%求出vn,即两个数据点的距离长度
        end
        vn1 = sort(vn1);              %将每一列由小到大排列一遍
        px(i) = kn / N / (vn1(kn));   %计算概率密度
    end
    %disp(px);
end

if n == 2                             %当为二维向量时
    px = zeros(N,1);                  %用于存储概率
    vn2 = zeros(N,1);
    for i = 1:N
        for j = 1:m
            vn2(j) = sqrt((b(i,1)-a(j,1))^2+(b(i,2)-a(j,2))^2);       %计算出两点之间的距离
        end
        vn2 = sort(vn2);
        px(i) = kn/N/(vn2(kn));                                       %计算出概率密度
    end
end

end

testKneighbor.m

%用于进行上机题4-4
clear
load('w1.mat');
load('w2.mat');
load('w3.mat');

k1=1;
k2=3;
k3=5;

%完4-4第三题
a1=w3(:,1);
N=100;
b=2*rand(N,1);                    %首先产生1000-3之间的随机数
p1=kneighbor(a1,k1,b);
p2=kneighbor(a1,k2,b);
p3=kneighbor(a1,k3,b);
figure(1);
subplot(1,4,1);
plot(b,p1,'.');
subplot(1,4,2);
plot(b,p2,'.');
subplot(1,4,3);
plot(b,p3,'.');

%完4-4第三题
b1=[];
a2=w2(:,1);
a3=w2(:,2);
b1=[a2 a3];
b2=3*rand(N,2);                   %产1000-4的二维随机数

p11=kneighbor(b1,k1,b2);
p12=kneighbor(b1,k2,b2);
p13=kneighbor(b1,k3,b2);
data1=[b2 p11];
figure(2);
plot3(b2(:,1),b2(:,2),p11,'.');
grid on;
figure(3);
plot3(b2(:,1),b2(:,2),p12,'.');
grid on;
figure(4);
plot3(b2(:,1),b2(:,2),p13,'.');
grid on;

clear

[模式分类] Parzen窗概率密度估计与Kn近邻概率密度估计_第1张图片
[模式分类] Parzen窗概率密度估计与Kn近邻概率密度估计_第2张图片
[模式分类] Parzen窗概率密度估计与Kn近邻概率密度估计_第3张图片
[模式分类] Parzen窗概率密度估计与Kn近邻概率密度估计_第4张图片
[模式分类] Parzen窗概率密度估计与Kn近邻概率密度估计_第5张图片

你可能感兴趣的:(Pattern,Recognition)