IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    online lda 的dirichlet_expectation函数

    余争的个人页面发表于 2013-12-25 12:56:57
    love 0

    起因

    看onlineldavb.py的时候看到求E[log(theta)] 期望的函数如下:

    def dirichlet_expectation(alpha):
        """
    For a vector theta ~ Dir(alpha), computes E[log(theta)] given alpha.
    """
        if (len(alpha.shape) == 1):
            return(psi(alpha) - psi(n.sum(alpha)))
        return(psi(alpha) - psi(n.sum(alpha, 1))[:, n.newaxis])
    今天看了半天都不理解为何dirichlet的期望可以由上面的函数来实现,后来看到几个公式之后才明白,这里记录一下过程。

    psi函数

    psi应该是gamma函数的一阶导数,有以下代码可以理解:

    >>> from scipy import special
    >>> x = [2, 3, 25.5]
    >>> special.polygamma(1, x)
    array([ 0.64493407,  0.39493407,  0.03999467])
    >>> special.polygamma(0, x) == special.psi(x)
    array([ True,  True,  True], dtype=bool)
    polygamma是gamma函数的N阶导数。

    公式推导

    \Psi(x) = \frac{d}{dx} \ln(\Gamma(x))

    其它细节可参考链接:http://www.hiit.fi/u/ahonkela/dippa/node95.html

    (话说osc如何插入公式?)




沪ICP备19023445号-2号
友情链接