有下面一个问题:
一个工厂里面,工资有三档,低,中,高,分别为100块,200块,300块。其中拿低档工资的工人占60%,拿中档工资的工人占30%,拿高档工资的工人10%人。求该工厂工人工资的期望值。
一个解决方法是蒙特卡罗估计。即随机的对该厂工人构造采样,求均值,结果随着采样数量增加会收敛该式 0.6N∗100+0.3N∗200+0.1N∗300N
接下来,问题改变了。该工厂有一个车间,工人的收入分布有所不同。低档50%,中档30%,高档20%。假设我们只能从该车间工人中采样,如何得到该厂的工人工资的期望值。
如果我们直接从该车间工人中采样取均值,结果是错误的,因为车间工人工资分布与工厂工人工资分布是不同的,从车间工人中采样的结果应该收敛到该式 0.5N∗100+0.3N∗200+0.2N∗300N ,显然与上式不同。
=====================重要性采样=============================
E[f(x)]=∑xp(x)f(x)
这是定义
p(x)f(x)=q(x)f(x)p(x)q(x)
显然总可以这么写
Ep[f(x)]=∑xp(x)f(x)=∑xq(x)[f(x)p(x)q(x)]=Eq[f(x)p(x)q(x)]
因此,我们在用来自车间的工人采样时,只需要在工人工资数额前乘上一个权重 p(x)q(x) ,如对于低档次工资的工人,权重为 0.60.5 ,中档 0.30.3 ,高档 0.10.2 ,把所采工人的工资按权重求均值,就是工厂工人工资的期望值。
下面是两个公式:
公式一:蒙特卡罗估计,即第一种情况,从x服从p分布中采样求均值
公式二:重要采样估计,即第二种情况,从x服从q分布中采样,求x服从p分布的均值
=======================为什么叫做重要性采样=========================
假设f(x)是一个钟形曲线,但我并不知道f(x)的解析式是什么,我只有一张图片。我可以使用蒙特卡罗估计方法来求曲线在[1,2]的面积,即使用均匀分布采样N个点,对N个点的值求均值。均值×1(底)就是对曲线面积的估计。
然而我们都知道,钟形曲线两端是非常靠近坐标轴的,值很小,而中间部分才是最主要的部分,因此,我们可以对中间部分多采一些样本,两端少采一些样本。例如我们用一个高斯分布q(x)对曲线采样,让q(x)隆起的部分,对齐f(x)隆起的部分,就能达到我们的目的(实际操作是很难贴合的,但我们在这里假设q(x)全部在[1,2]内部)。
此时,我们可以使用重要性采样,对每个点,采样值是 f(x)Nq(x) ,求均值即所求面积。