详细描述如下
假设城市里的公交线路中间不间隔,如有30路公交,就是1~30路。现在通过观测到的公交车路数来估计此城市一共有多少路公交车。
- matlab代码
clc
clear
%路线初始值设为1000
N = 1000;
p = ones(N, 1);
p = p ./ sum(p);
% update 观测到的公交车线路
update = [60 30 45 70 60 66 45 77];
for i = 1 : numel(update)
up = update(i);
%lh为似然值
lh = (1:N)';
%对lh做归一化
lh = 1 ./ lh;
%如果出现第up路公交,则这个城市有1~(up-1)条线路的概率为0
lh(1:up-1) = 0;
p = p .* lh;
%p为一列向量,其元素表示每次迭代后每条线路出现的概率
p = p ./ sum(p);
end
% 对总公交线路求期望
e = sum(p .* (1:N)')
- 代码中主要运用到的数学思想是贝叶斯公式
- 实际测试时发现,当观测到的数据较小时(如如update中仅有一两个数据),初始值N对最终的结果影响较大;而随着观测数据的不断增大(如update中有5个以上观测数据),N取500,1000或2000,期望e都会收敛到一个值。