logo资料库

parzen窗&Kn近邻模式别matlab.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
模式识别基础 概率密度函数非参数估计 小组成员:201211211056 黄心钤 201211211046 刘妙莹 201211211038 卢浩然 一、Parzen 窗估计程序: 我们小组使用 matlab 来实现书上的算法。 首先建立文件 parzen1.m 下面是函数的代码: function p=parzen1(xi,x,h1,f) %xi 为样本,x 为概率密度函数的自变量的取值, %h1 为样本数为 1 时的窗宽,f 为窗函数句柄 %返回 x 对应的概率密度函数值 if isempty(f) %若没有指定窗的类型,就使用正态窗函数 f=@(u)(1/sqrt(2*pi))*exp(-0.5*u.^2); end; N=size(xi,2);%N 为 xi 样本的列数 hn=h1/sqrt(N); [X,Y]=meshgrid(x,xi);%生成采样点的 X,Y 坐标 p=sum(f((X-Y)/hn)/hn)/N;%书上公式 我们使用均匀分布的样本数据来检查我们的函数是否正确。 >> xi=rand(1,2000); %生成均匀分布的样本 >> x=linspace(-2,2,2000); %生成-2~2 递增的 2000 个数据。 >> p=parzen1(xi,x,1,[]);%调用函数,窗函数使用默认的正态窗 >> plot(x,p); 1.4 1.2 1 0.8 0.6 0.4 0.2 0 -1 -0.5 0 0.5 1 1.5 2 再使用正态分布的样本数据检查是否正确。 >> clear;%清除刚才的所有数据 >> xi=randn(1,2000);%生成正态分布的样本 >> x=linspace(-2,2,2000);%生成-2~2 递增的 2000 个数据。 >> p=parzen1(xi,x,1,[]); %调用函数,窗函数使用默认的正态窗
>> plot(x,p); 0.5 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 将窗宽增大后曲线明显平滑了许多(窗宽为 4 的情况): 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2
二、 Kn-近邻估计程序: 首先建立函数文件 knjinlin.m 下面是函数的代码: function p=knjinlin(xi) N=size(xi,2);%获取 kn=sqrt(N);%取 kn 为 N^½ x=linspace(-2,2,1000);%生成图像横坐标 p=zeros(1,1000);%初始化概率密度值 for i=1:1000 y=sort(abs(x(i)-xi));%在一维情况下计算两点的距离作为体积 V=y(kn);%包含 Kn 个样本所需要的体积 p(i)=(kn/N)/V;%循环迭代计算 end plot(x,p); 首先使用均匀分布验证函数是否正确: >> x=rand(1,1024);%生成 1024 个样本使 kn 为整数,方便使用 kn 作为下标访问数组 >> p=knjinlin(x); 4 3.5 3 2.5 2 1.5 1 0.5 0 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 再使用正态分布验证函数: >> x=randn(1,1024); >> p=knjinlin(x); 1.4 1.2 1 0.8 0.6 0.4 0.2 0 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 图像都基本符合预期,就是噪声有点大。
分享到:
收藏