Kernel density estimation via the Parzen-Rosenblatt window method
Generative Adversarial Nets code
对Ian提到的采用Gassian Parzen Window 去拟合G产生的样本并估计对数似然性(即给予观察样本,判断模型正确的可能性)如何实现的原理很感兴趣?
于是找到源代码parzen_ll.py来看,
但是苦于并没有学过theano及pylearn2所以看起来不是明白,本来想尝试安装py2learn来测试,结果看了官网的安装要求,请卸载python,清除所有组件。这个代价有点大
,毕竟我是要做Tensorflow的。因此只能破罐破摔来,硬着头皮看代码,有些东西只能靠google,看了一个大概。首先来说一下Parzen Window
2 Defining the Region Rn
Parzen windown 是一种应用广泛的非参数估计方法,从采样的样本 p(xn) p ( x n ) 中估计概率密度函数 p(x) p ( x ) 。
这种方法最基本的思想是给定一个特定的区域(Window)对落入其中的样本进行计数,可以得到样本落入该区域的概率大约为:
从数学的角度来求取在区域R里k个观察样本的概率,我们可以考虑一个Binomial(二项式分布):
然后在二项式分布假设的情况下, 所以我们可以求得其均值为:
在连续性假设条件下:
其中v为区域R的体积,我们可以对公式进行变形,可以得到:
上面简单的公式可以让计算给定点 x x 的概率密度,通过计算有多少点落入确定性区域。
确定区域的两种不同的方法
一种方法是固定体积(volume)如下图,原理是取一个固定大小的区域R,观察有多少样本落入其中。
另外一种方法是样本数目K固定;k近邻算法就是这个原理,即是,对于一定大小的样本总数,我们取能框住k个样本的区域R
3D- hypercubes
The window function
如上面所示,我们可以可视化区域 ,也就很容易计算出多少点在区域内,数学表达上是: