matlab中提供了核平滑密度估计函数ksdensity(x):

[f, xi] = ksdensity(x)

返回矢量或两列矩阵x中的样本数据的概率密度估计f。 该估计基于高斯核函数,并且在等间隔的点xi处进行评估,覆盖x中的数据范围。

ksdensity估计单变量数据的100点密度,或双变量数据的900点密度。

ksdensity适用于连续分布的样本。

也可以指定评估点:

[f,xi] = ksdensity(x,pts) specifies points (pts) to evaluate f. Here, xi and pts contain identical values。

核密度估计方法:

代码实现,对比:

clear all;

clc;

n=100;

% 生成一些正态分布的随机数

x=normrnd(0,1,1,n);

minx = min(x);

maxx = max(x);

dx = (maxx-minx)/n;

x1 = minx:dx:maxx-dx;

h=0.5;

f=zeros(1,n);

for j = 1:n

for i=1:n

f(j)=f(j)+exp(-(x1(j)-x(i))^2/2/h^2)/sqrt(2*pi);

end

f(j)=f(j)/n/h;

end

plot(x1,f);

%用系统函数计算比较

[f2,x2] = ksdensity(x);

hold on;

plot(x2,f2,'r'); %红色为参考

PRML上核密度估计(parzen窗密度估计)的实现:

%% Demonstrate a non-parametric (parzen) density estimator in 1D

%%

% This file is from pmtk3.googlecode.com

function parzenWindowDemo2

% setSeed(2);

%[data, f] = generateData;

% http://en.wikipedia.org/wiki/Kernel_density_estimation

data = [-2.1 -1.3 -0.4 1.9 5.1 6.2]';

f = @(x) 0;

n = numel(data);

domain = -5:0.001:10;

kernels = {'gauss', 'unif'};

for kk=1:2

kernel = kernels{kk};

switch kernel

case 'gauss', hvals = [1, 2];

case 'unif', hvals = [1, 2];

end

for i=1:numel(hvals)

h = hvals(i);

figure;

hold on

handle=plot(data, 0.01*ones(1,n), 'x', 'markersize', 14);

set(handle,'markersize',14,'color','k');

g = kernelize(h, kernel, data);

plot(domain,g(domain'),'-b');

if strcmp(kernel, 'gauss')

for j=1:n

k = @(x) (1/h)*gaussProb(x,data(j),h^2);

plot(domain, 0.1*k(domain'), ':r');

end

end

title(sprintf('%s, h=%5.3f', kernel, h), 'fontsize', 16);

%printPmtkFigure(sprintf('parzen-%s-%d', kernel, h));

end

%placeFigures('nrows',3,'ncols',1,'square',false);

end

end

function [data, f] = generateData

mix = [0.35,0.65];

sigma = [0.015,0.01];

mu = [0.25,0.75];

n = 50;

%% The true function, we are trying to recover

f = @(x)mix(1)*gaussProb(x, mu(1), sigma(1)) + mix(2)*gaussProb(x, mu(2), sigma(2));

%Generate data from a mixture of gaussians.

model1 = struct('mu', mu(1), 'Sigma', sigma(1));

model2 = struct('mu', mu(2), 'Sigma', sigma(2));

pdf1 = @(n)gaussSample(model1, n);

pdf2 = @(n)gaussSample(model2, n);

data = rand(n,1);

nmix1 = data <= mix(1);

data(nmix1) = pdf1(sum(nmix1));

data(~nmix1) = pdf2(sum(~nmix1));

end

function g = kernelize(h,kernel,data)

%Use one gaussian kernel per data point with smoothing parameter h.

n = size(data,1);

g = @(x)0;

%unif = @(x, a, b)exp(uniformLogprob(structure(a, b), x));

for i=1:n

switch kernel

case 'gauss', g = @(x)g(x) + (1/(h*n))*gaussProb(x,data(i),h^2);

%case 'unif', g = @(x)g(x) + (1/n)*unif(x,data(i)-h/2, data(i)+h/2);

case 'unif', g = @(x)g(x) + (1/(h*n))*unifpdf(x,data(i)-h/2, data(i)+h/2);

end

end

end

function setupFig(h)

figure;

hold on;

axis([0,1,0,5]);

set(gca,'XTick',0:0.5:1,'YTick',[0,5],'box','on','FontSize',16);

title(['h = ',num2str(h)]);

scrsz = get(0,'ScreenSize');

left = 20; right = 20;

lower = 50; upper = 125;

width = scrsz(3)-left-right;

height = (scrsz(4)-lower-upper)/3;

set(gcf,'Position',[left,scrsz(4)/2,width, height]);

end

function p = gaussProb(X, mu, Sigma)

% Multivariate Gaussian distribution, pdf

% X(i,:) is i'th case

% *** In the univariate case, Sigma is the variance, not the standard

% deviation! ***

% This file is from pmtk3.googlecode.com

d = size(Sigma, 2);

X = reshape(X, [], d); % make sure X is n-by-d and not d-by-n

X = bsxfun(@minus, X, rowvec(mu));

logp = -0.5*sum((X/(Sigma)).*X, 2);

logZ = (d/2)*log(2*pi) + 0.5*logdet(Sigma);

logp = logp - logZ;

p = exp(logp);

end

function x = rowvec(x)

% Reshape a matrix into a row vector

% Return x as a row vector. This function is useful when a function returns a

% column vector or matrix and you want to immediately reshape it in a functional

% way. Suppose f(a,b,c) returns a column vector, matlab will not let you write

% f(a,b,c)(:)' - you would have to first store the result. With this function you

% can write rowvec(f(a,b,c)) and be assured that the result is a row vector.

% This file is from pmtk3.googlecode.com

x = x(:)';

end

function y = logdet(A)

% Compute log(det(A)) where A is positive-definite

% This is faster and more stable than using log(det(A)).

%

%PMTKauthor Tom Minka

% (c) Microsoft Corporation. All rights reserved.

% This file is from pmtk3.googlecode.com

try

U = chol(A);

y = 2*sum(log(diag(U)));

catch % #ok

y = 0;

warning('logdet:posdef', 'Matrix is not positive definite');

end

end

对比发现与MATLAB自带的函数的估计结果仍有一定的差异?

参考:

parzen窗概率密度估计 matlab,核密度估计(parzen窗密度估计)相关推荐

  1. 核密度估计 matlab,核密度估计(kde)的工具箱

    kde工具箱(matlab) @kde Contents.m README.txt TODO.txt adjustBW.dll adjustBW.m adjustBW.mexglx adjustPoi ...

  2. parzen窗估计如何进行结果分析_Parzen窗方法的分析和研究

    1333755 第 1 页 对 Parzen 窗 /PNN 算法的学习和研究报告 姓名:吴潇 学号: 1333755 1 . Parzen 窗方法综述.发展历史及现状 模式识别领域的非参数估计方法大致 ...

  3. parzen窗估计如何进行结果分析_Parzen窗方法的分析和研讨

    对 Parzen 窗 /PNN 算法的学习和研究报告 姓名:吴潇 学号: 1333755 1 . Parzen 窗方法综述.发展历史及现状 模式识别领域的非参数估计方法大致可以分为两类.第一种类型是先 ...

  4. 核密度聚类(一)核函数、核密度估计、核密度聚类

    核密度聚类 当问题需要自动地确定聚类数目时,传统的KMeans等聚类方法不在适用.因此,使用"核概率密度估计"的思路自行设计了两种聚类方法.本文收录: 核是什么 核密度估计 基于核 ...

  5. matlab程序 地震 相干噪声_地震台站台基噪声功率谱概率密度函数Matlab实现

    地震台站台基噪声功率谱概率密度函数 Matlab 实现 谢江涛 林丽萍 谌 亮 赵 敏 [摘 要] 摘要 选取 2015 年四川数字测震台网中筠连和华蓥山地震台记录的垂 直分向连续波形数据,利用 Ma ...

  6. Matlab GUI自定义提示窗(对话框)

    Matlab GUI自定义提示窗/对话框 前言 1. 采用警告窗口 2. 采用消息窗口为模板,自定义logo 3. 自定义提示窗口字体的大小 4. 将窗口字体据中显示 总结 欢迎学习交流! 邮箱: z ...

  7. matlab设置固定的窗宽窗位,【经验谈】如何设定窗宽窗位,附正常人体组织CT值...

    让学习成为一种习惯! 医学影像服务中心拥有500病例征象+讲座 一般CT机可显示的CT值范围为-1000-+1000共2000个密度等级,而人的肉眼仅能识别16个灰阶,若把2000个CT值分成16个灰 ...

  8. matlab 功率谱密度 汉宁窗_信号处理的基本概念

    传感器类型: 根据传感器各构成部分工作方式的不同,可将传感器分成不同的类型:依据接收方式不同,有相对式和绝对式(惯性式)之分:依据机电转换输出量的不同又有发电机型和参数型两种类型.测量电路可输出不同的 ...

  9. matlab 功率谱密度 汉宁窗_信号系统的一些基本概念

    泄露 截断会使谱分析精度受到影响.如果时域信号是周期性的,而截断又按整周期取数,信号截断不会产生问题,因为每周期信号都能代表整个周期信号变化情况.若不是整周期截取数据,则截断将使信号波形两端产生突变, ...

最新文章

  1. AngularJS和DataModel
  2. UA OPTI570 量子力学1 电磁波与光子
  3. VTK:Utilities之Scalars
  4. python ssl_Python3 ssl模块不可用的问题
  5. 首批国家应用数学中心:广东独占2家
  6. Java 算法 找素数
  7. doc转docx文件会乱吗_利用python将doc文件转换为docx
  8. mysql主流版本2020_mysql高级2020.7.12-2020.7.13
  9. PHP 实现文件下载实例
  10. FLASH缓动导航制作方法.
  11. 基于单片机智能自动浇花控制系统设计(毕业设计)
  12. 【剑指offer】19. 二叉树的镜像
  13. tplink怎么进去_如何进入路由器设置界面 如何登陆无线路由器
  14. 计算机断电硬盘数据会丢失吗,为什么突然停电后电脑硬盘数据会丢失?
  15. Python实现简单的神经网络
  16. APP安全测试点分析
  17. 【C语言/入门游戏】猜数字,关机指令游戏及go to语句
  18. java技术交流群532101200
  19. 基于Filament引擎的Animoji效果实现
  20. 基于HTML仿oppo手机商城电商项目的设计与实现6个页面

热门文章

  1. 学习-Java异常处理之throw之酒店入住
  2. js中 如何终止foreach循环?
  3. android 文件分类管理,分类文件管理app下载-分类文件管理安卓最新版下载-丫丫安卓网...
  4. 详解回调地狱以及promise
  5. 怎么在php中调用js函数,如何从PHP调用JS函数?
  6. 面试-python基础知识
  7. 递归——迭代是人,递归是神
  8. 潘石屹得中国电信首张5G电话卡,尾号0001
  9. C语言初阶,知识点简介(2)
  10. 不逼自己一把都不知道自己还能这么优秀(小鹅通学习记录大批量队列同步)