最近学习了《计算机模式识别》中的Parzen窗法原理,老师也讲到这种方法的实现过程及Matlab代码实现过程(代码由老师提供),在此感谢我的赵宗泽赵老师。下面我将个人的理解写了篇小文章,希望对需要的朋友有所帮助,理解有误或不足之处还望大家及时指出纠正。 Parzen窗法原理
整个实现过程:
Matlab实现过程:
显示函数:
clear;clc
% parzen 方窗 parzen1 高斯窗
x=normrnd(0,1,1,10000);
f=sort(x(1:1000));
% N=10 h= 0.25 , 1, 4
p1=Parzen1(x,0.25,10);
p2 = Parzen1(x,1,10);
p3 = Parzen1(x,4,10);
subplot(331)
plot(f(1:1000),p1)
subplot(332)
plot(f(1:1000),p2)
subplot(333)
plot(f(1:1000),p3)
hold on
% N=100 h= 0.25 , 1, 4
p1=Parzen(x,0.25,100);
p2 = Parzen(x,1,100);
p3 = Parzen(x,4,100);
subplot(334)
plot(f(1:1000),p1)
subplot(335)
plot(f(1:1000),p2)
subplot(336)
plot(f(1:1000),p3)
hold on
% N=1000 h= 0.25 , 1, 4
p1=Parzen(x,0.25,1000);
p2 = Parzen(x,1,1000);
p3 = Parzen(x,4,1000);
subplot(337)
plot(f(1:1000),p1)
subplot(338)
plot(f(1:1000),p2)
subplot(339)
plot(f(1:1000),p3)
方窗函数:
function p=Parzen(x,h,N)
%% 方窗 parzen 窗
f = x(1:1000);
f=sort(f);
b=0;
for i=1:1000
for j=1:N
if abs((x(j)-f(i))/h) <= 1/2 %方窗
q=1;
else
q=0;
end
b= q+ b;
end
a(i)=b;
b=0;
end
for i=1:1000
p(i) = 1/(N*h)*a(i);
end
end
正态窗函数的确定:
实现过程:
确定正态窗函数:
function p = Parzen1(x,h,N)
% 高斯函数Parzen 窗 统计落在parzen窗内的估计概率
% x - 符合某种概率密度分布的数据
% h - 窗长度
% N -
%
f = x(1:1000);
f=sort(f);
b=0;
%h1 = h/sqrt(N);
h1 = h;
for i=1:1000
for j=1:N
b= b+ exp(((x(j)-f(i))/h1).^2/(-2))/sqrt(2*pi)/h1;
end
p(i) = b/N;
b=0;
end
end
运行显示结果:
代码操作说明:
运行之前需要把文件的路径添加到matlab,然后,运行parzen_show.m文件,其他文件都是函数。
|
请发表评论