Parzen窗法(模式识别_Matlab实现:附具体实现代码)

最近学习了《计算机模式识别》中的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文件,其他文件都是函数。

  • 12
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
Parzen模式识别是一种基于密度估计的非参数模式识别方法,主要用于分类问题。在Matlab实现Parzen模式识别可以按照以下步骤进行: 1. 准备数据集:首先需要准备一个分类问题的数据集,其中包含输入样本及其对应的标签。 2. 确定窗口函数:Parzen窗方法的核心是窗口函数,其作用是对每个样本点周围的区域进行加权,从而得到该样本点所属类别的概率估计。窗口函数通常选择高斯函数,其表达式为: $$ K(x) = \frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)) $$ 其中,$n$为样本的维数,$\mu$和$\Sigma$分别为高斯分布的均值和协方差矩阵。 3. 确定窗口大小:窗口大小决定了样本点周围的区域大小,通常可以通过交叉验证等方法确定最优大小。在Matlab中,可以通过设置窗口半径来控制窗口大小。 4. 实现Parzen窗分类器:在Matlab中,可以通过编写一个函数来实现Parzen窗分类器。该函数的输入为样本集、标签集、窗口半径和窗口函数等参数,输出为各个类别的概率估计值。 以下是一个简单的Matlab代码示例,用于实现Parzen窗分类器: ```matlab function [p1, p2] = parzen_window_classifier(X, Y, radius, kernel) % X: 输入样本集,每行为一个样本 % Y: 样本对应的标签 % radius: 窗口半径 % kernel: 窗口函数 n = size(X, 1); d = size(X, 2); labels = unique(Y); % 所有类别标签 p1 = zeros(n, 1); % 类别1的概率估计值 p2 = zeros(n, 1); % 类别2的概率估计值 for i = 1:n x = X(i, :); distances = pdist2(X, x); % 计算样本点到其他点的距离 indices = find(distances <= radius); % 找到窗口内的样本 N = length(indices); % 窗口内的样本数量 if N == 0 % 窗口内没有样本 p1(i) = 0; p2(i) = 0; else K = zeros(N, 1); for j = 1:N K(j) = kernel(X(indices(j), :), x); end p1(i) = sum(Y(indices) == labels(1)) / N; % 类别1的概率估计值 p2(i) = sum(Y(indices) == labels(2)) / N; % 类别2的概率估计值 end end end function K = gaussian_kernel(x, mu, sigma) % x: 输入样本 % mu: 高斯分布的均值 % sigma: 高斯分布的协方差矩阵 d = length(x); K = exp(-(x-mu)*inv(sigma)*(x-mu)'/2) / ((2*pi)^(d/2) * det(sigma)^(1/2)); end ``` 在上述代码中,`parzen_window_classifier`函数用于实现Parzen窗分类器,`gaussian_kernel`函数用于计算高斯核函数。用户可以根据自己的数据集和窗口函数进行修改,在Matlab中运行即可得到分类结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛毛真nice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值