本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:
AI学习笔记(15)---《Parzen 窗估计法》
Parzen 窗估计法
目录
1.前言
2.相关知识
2.1无参数估计方法
2.2窗核函数
2.3基本估计式
3.Parzen 窗估计法原理
3.1基本思想
3.2Parzen 窗估计法
4.编程实现
4.1无参数估计MATLAB代码
4.2 Parzen 窗估计MATLAB代码
4.3 测试输入
4.4 预期输出
1.前言
理解并掌握无参数估计方法的基本思想以及原理,并使用 matlab 实现一个简单的窗核函数。
理解并掌握parzen窗估计方法的基本思想以及原理,并使用 matlab 进行一次简单的估计试验。
2.相关知识
2.1无参数估计方法
相比于有参数估计方法,无参数估计方法不需要假设概率密度函数,能处理任意的概率密度分布。
无参数估计的目的是从样本集 K{X1,X2,...,Xn}
估计样本空间中任意一点的概率密度 p(x)
,其基本方法是使用某种核函数 φ(X)
表示某一样本对估计密度函数的贡献,并所有样本核函数的叠加视作概率密度函数。这种方式直观的意义是,靠近样本点位置处的概率密度高,样本点密集出现的地方概率密度高。
2.2窗核函数
通过前面对无参数估计方法的介绍可以看到,有了样本集和窗核函数我们就能对样本空间的概率密度函数进行无参数的估计。因此,窗核函数的选择是无参数估计方法非常重要的一个部分,这里介绍一些具有代表性的窗核函数—— parzen 窗。
在 n
维特征空间中,取区域 Rn
中的一个 n
维的超立方体,hN
是其棱长,其体积为 VN=hNn
。
定义窗核函数如下:
这样,φ(u)
就以函数值 1
界定了一个以原点为中心、棱长为 1
的 n
维超立方体。
parzen 窗估计法可以使用这个方窗来进行无参估计,此外,还可以选择其他的窗核函数,它们需要满足以下两个条件:
2.3基本估计式
对于属于同一类 ωi
的样本组成的空间,其概率密度函数 p(x∣ωi)
(简写为 p(x)
)是 ωi
类的总体概率密度。
随机向量 x
落在区域 R
中的概率为 P=∫Rp(x)dx
,设 N
个样本 x1,x2,...,xn
是上述概率密度为 p(x)
的总体中独立抽取的, N
个样本中有 k
个样本落入区域 R
的概率 Pk
服从离散随机变量的二项分布
显然以上是 p(x)
的基本估计式,与 N,V,k
有关,并存在一定的误差。理论上,要使得 p^(x)→p(x)
,则需要 V→0,k→∞,N→∞
。
3.Parzen 窗估计法原理
3.1基本思想
以上概率密度的窗核函数的估计法基本思想可以总结如下:
小区域的概率密度可以近似为:
3.2Parzen 窗估计法
Parzen 窗估计法使用的是上一关介绍的窗核函数,例如均匀窗核
并且,为了使得区域序列的体积 Vn
按 N
的某个函数随 N
的增大 不断地缩小。可令窗的体积
在这时对应的 kN
和 NkN
都加以限制从而使得 p^(x)
收敛于 p(x)
。
4.编程实现
4.1无参数估计MATLAB代码
function [result] = step1_mission(samples)
[m, n] = size(samples); % 获取样本矩阵的维度信息(行数和列数)
result = ones(1, m); % 初始化结果数组,初始值为1
for i = 1:m % 遍历每一行
for j = 1:n % 遍历每一列
if abs(samples(i, j)) > 0.5 % 判断当前元素的绝对值是否大于0.5
result(i) = 0; % 如果是,则将结果数组中对应的值设置为0
break; % 立即退出当前行的循环,进入下一行的判断
end
end
end
end
4.2 Parzen 窗估计MATLAB代码
function [pf] = step2_mission(samples, h, f)
[nf, ~] = size(f); % 获取f矩阵的行数
[ns, ~] = size(samples); % 获取样本矩阵的行数
pf = zeros(1, nf); % 初始化pf数组
V = h / sqrt(ns); % 计算V值
for i = 1:nf
p = 0; % 初始化概率累加器
for j = 1:ns
p = p + exp(-norm((samples(j, :) - f(i, :)) / V)^2 / 2) / sqrt(2 * pi); % 计算概率密度并累加
end
pf(i) = p / (ns * V); % 计算f(i,:)的概率密度函数值
end
end
4.3 测试输入
MATLAB终端输入下面指令
测试step1_mission(samples)
samples = [-7.82 -4.58 -3.97; -6.68 3.16 2.71; 4.36 -2.91 2.09; 6.72 0.88 2.80; -8.64 3.06 3.50; -6.87 0.57 -5.45; 4.47 -2.62 5.76; 6.73 -2.01 4.18; -7.71 2.34 -6.33; -6.91 -0.49 -5.68; 6.18 2.81 5.82; 6.72 -0.93 -4.04; -6.25 -0.26 0.56; -6.94 -1.22 1.13; 8.09 0.20 2.25; 6.81 0.17 -4.15; -5.19 4.24 4.04; -6.38 -1.74 1.43; 4.08 1.30 5.33; 6.27 0.93 -2.78];
s = samples(1:10,:)/10;
disp('task1');
r = step1_mission(s)
s = samples(10:20,:)/10;
disp('task2');
r = step1_mission(s)
s = samples(1:20,1)/10;
disp('task3');
r = step1_mission(s)
s = samples(1:20,2:3)/10;
disp('task4');
r = step1_mission(s)
测试step2_mission(samples, h, f)
samples = normrnd(0,1,1,10000)';
f = -5:0.01:5;
f = f';
p1 = step2_mission(samples(1:10,:),0.25,f);
p2 = step2_mission(samples(1:10,:),1,f);
p3 = step2_mission(samples(1:10,:),4,f);
subplot(331);
plot(f,p1);
subplot(332);
plot(f,p2);
subplot(333);
plot(f,p3);
hold on
p1 = step2_mission(samples(1:100,:),0.25,f);
p2 = step2_mission(samples(1:100,:),1,f);
p3 = step2_mission(samples(1:100,:),4,f);
subplot(334);
plot(f,p1);
subplot(335);
plot(f,p2);
subplot(336);
plot(f,p3);
hold on
p1 = step2_mission(samples(1:1000,:),0.25,f);
p2 = step2_mission(samples(1:1000,:),1,f);
p3 = step2_mission(samples(1:1000,:),4,f);
subplot(337);
plot(f,p1);
subplot(338);
plot(f,p2);
subplot(339);
plot(f,p3);
saveas(1,'./result/myfig.png');
disp("Runing Finished");
4.4 预期输出
文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。