Hello Mat

 找回密码
 立即注册
查看: 7280|回复: 1

K最近邻密度估计法

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2017-2-4 21:23:27 | 显示全部楼层 |阅读模式
考虑有N个数据点,x属于R,i=1,2,……,N,对于我们而言,这组数据统计分布未知,对于给定的x,通过k最近邻密度估计法,计算未知概率密度函数的参数值,主要的计算步骤如下:
1)选择k值;
2)计算x到所有 x属于R,i=1,2,……,N的距离(距离计算可用欧式距离或者马氏距离等);
3)找到k个离最近的点;
4)计算k个离最近的点所在的体积V(x)
5)得到概率分布函数:
p(x) = k/N/V(x)

采用欧氏距离计算,在得到的k个离x最近的点找到最远的那一个点,距离记为,则体积为:
q  对于一维数据点而言,V(x) = 2*ρ
q  对于二维数据点而言,V(x) = pi*ρ
q  对于三维数据点而言,V(x) = 4*pi*ρ*ρ*ρ/3

MATLAB代码如下:
  1. clc,clear,close all                            % 清屏、清工作区、关闭窗口
  2. warning off                                 % 消除警告
  3. feature jit off                               % 加速代码执行
  4. %概率密度函数实际为混合高斯模型
  5. m=[1; 4]';
  6. S(:,:,1)=[0.3];
  7. S(:,:,2)=[0.3];
  8. P=[2/3 1/3];
  9. N=1000;
  10. randn('seed',0);
  11. [X]=generate_gauss_classes(m,S,P,N);

  12. % Plot the pdf
  13. x=-5:0.1:5;
  14. pdfx=(2/3)*(1/sqrt(2*pi))*exp(-((x-1).^2)/2)+(1/3)*(1/sqrt(2*pi))*exp(-((x-4).^2)/2);
  15. plot(x,pdfx); hold;

  16. %函数knn_density_estimate 估计概率密度函数 pdf (k=21)
  17. pdfx_approx=knn_density_estimate(X,21,-5,5,0.1);
  18. plot(-5:0.1:5,pdfx_approx,'r');

  19. legend('原始分布函数','K最近邻密度估计')
复制代码
相应的K最近邻密度估计法函数如下:
  1. function [px]=knn_density_estimate(X,knn,xleftlimit,xrightlimit,xstep)
  2. % 函数调用格式
  3. %   [px]=knn_density_estimate(X,knn,xleftlimit,xrightlimit,xstep)
  4. %  k-nn最近邻密度估计
  5. %输入:
  6. %   X:           数据点
  7. %   knn:         最近邻个数.
  8. %   xleftlimit:     x的最小估计值
  9. %   xrightlimit:    x的最大估计值
  10. %   xstep:       步长
  11. %输出:
  12. %   px:          p(x)的估计值

  13. [l,N]=size(X);
  14. if l>1
  15.     px=[];
  16.     fprintf('Feature set has more than one dimensions ');
  17.     return;
  18. end

  19. k=1;
  20. x=xleftlimit;
  21. while x<xrightlimit+xstep/2
  22.     eucl=[];
  23.     for i=1:N
  24.         eucl(i)=sqrt(sum((x-X(:,i)).^2));
  25.     end
  26.     eucl=sort(eucl,'ascend');  % 升序
  27.     ro=eucl(knn);
  28.     V=2*ro;
  29.     px(k)=knn/(N*V);
  30.     k=k+1;
  31.     x=x+xstep;
  32. end
复制代码







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

3

帖子

9

金钱

新手上路

Rank: 1

积分
12
发表于 2017-8-17 00:08:56 | 显示全部楼层
不错,支持下!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 22:46 , Processed in 0.210196 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表