如何标准化直方图

Posted

技术标签:

【中文标题】如何标准化直方图【英文标题】:how to normalize histogram 【发布时间】:2016-01-13 20:28:07 【问题描述】:

我会使用逆方法创建指数分布。我想标准化直方图。我该怎么做?

这是我的代码

N=100;
Lambda=2;
r=rand(N,1);
X=-log(1-r)/Lambda;
hist(X), colormap(bone);

t = 0:0.01:5;
pdf=Lambda*exp(-Lambda*t);
hold on, plot(t,pdf,'LineWidth',2)

【问题讨论】:

请通过规范化直方图来定义您的意思 您将每个元素与给定的数字相乘,pdf=c*Lambda*exp(-Lambda*t); 【参考方案1】:

直方图应归一化为单位面积,以便与理论pdf进行比较。要标准化为单位面积,您需要除以样本数和 bin 宽度:

N = 100;
Lambda=2;
r = rand(N,1);
X = -log(1-r)/Lambda;
[hy, hx] = hist(X); %/ get histogram values
hy = hy/numel(X)/(hx(2)-hx(1)); %//normalize histogram
bar(hx, hy) %// plot histogram
t = 0:0.01:5;
pdf = Lambda*exp(-Lambda*t);
hold on, plot(t,pdf,'LineWidth',2) %// plot pdf

或使用新的histogram 函数(在R2014b 中引入),该函数根据指定的规范化选项自动规范化

N = 100;
Lambda=2;
r = rand(N,1);
X = -log(1-r)/Lambda;
histogram(X, 'Normalization', 'pdf') %// plot normalized histogram
t = 0:0.01:5;
pdf = Lambda*exp(-Lambda*t);
hold on, plot(t,pdf,'LineWidth',2) %// plot pdf

【讨论】:

对于像我这样的外行读者来说,单位面积表示曲线的总面积必须等于1(单位)。

以上是关于如何标准化直方图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 0 和 1 之间标准化直方图的 Y 轴?

按两个标准分组的直方图 [python]

标准化直方图? [关闭]

在ggplot2中分别标准化多面直方图

如何使用带有词袋直方图的 libsvm

python 使用matplotlib.pyplot.hist和numpy权重的标准化直方图