Halcom 发表于 2017-2-4 21:12:42

Parzen窗

非参数检验方法,考虑有N个数据点,x属于R ,i=1,2,……,N ,采用Parzen窗来估计未知的密度函数,具体的表达式如下:
             p(x) = sum(fai( (x-xi)/h )) / N/ h
其中N足够大,h充分小,通常由用户自己设定。fai( x ) 函数为核密度估计函数。通常核密度估计函数采用高斯分布函数,因此有:p(x) = 1/N * sum( exp(-(x-xi)^2/2/h/h )/h/sqrt(2*pi) )
MATLAB代码如下:
clc,clear,close all                            % 清屏、清工作区、关闭窗口
warning off                                 % 消除警告
feature jit off                               % 加速代码执行
% 概率密度函数实际是一个混合高斯分布函数
% 采用 generate_gauss_classes函数产生所需要的数据
m=';   % 初始化
S(:,:,1)=;
S(:,:,2)=;
P=;
N=1000;
randn('seed',0);
=generate_gauss_classes(m,S,P,N);

% 绘图pdf
x=-5:0.1:5;
pdfx=(2/3)*(1/sqrt(2*pi*0.2))*exp(-.5*((x-1).^2)/0.2)+(1/3)*(1/sqrt(2*pi*0.2))*exp(-.5*((x-4).^2)/0.2);
plot(x,pdfx); hold on;

%Parzon窗计算,h = 0.1 and x in [-5, 5]
h=0.1;
pdfx_approx=Parzen_gauss_kernel(X,h,-5,5);
plot(-5:h:5,pdfx_approx,'r');
legend('原始分布函数','Parzen窗逼近效果')
相应的函数如下:
function =Parzen_gauss_kernel(X,h,xleftlimit,xrightlimit)
% 函数调用格式
%   =Parzen_gauss_kernel(X,h,xleftlimit,xrightlimit)
% Parzen 使用高斯基逼近一维PDF
%输入:
%   X:         数据点
%   h:         步长
%   xleftlimit:   x的最小估计值
%   xrightlimit:    x的最大估计值
%输出:
%   px:          p(x)的估计值

=size(X);
xstep=h;
k=1;
x=xleftlimit;
while x<xrightlimit+xstep/2
    px(k)=0;
    for i=1:N
      xi=X(:,i);
      px(k)=px(k)+exp(-(x-xi)'*(x-xi)/(2*h^2));
    end
    px(k)=px(k)*(1/N)*(1/(((2*pi)^(l/2))*(h^l)));
    k=k+1;
    x=x+xstep;
end产生服从高斯分布的数据集
function =generate_gauss_classes(m,S,P,N)
% 产生服从高斯PDF分布的数据集
%输入:
%   m:均值向量
%   S:正态分布的协方差矩阵
%   P:先验概率密度
%   N:总数据个数
%输出:
%   X:待分类的数据
%   y:分类的标签,对应于X
=size(m);
X=[];% 初始化
y=[];
for j=1:c
% 产生每一个分布下的 the 向量
   t=mvnrnd(m(:,j),S(:,:,j),fix(P(j)*N))';
   % 由于采用的是fix函数,总数据数可能小于N
   X=;
   y=;
end





页: [1]
查看完整版本: Parzen窗