首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DCP规则集编写Dirichlet日志似然

用DCP规则集编写Dirichlet日志似然
EN

Stack Overflow用户
提问于 2020-06-07 20:44:02
回答 1查看 101关注 0票数 1

我想把Dirichlet密度的日志可能性写成一个关于Dirichlet分布alpha参数的约束凸规划 (DCP)优化问题。然而,日志的可能性

代码语言:javascript
复制
def dirichlet_log_likelihood(p, alpha):
  """Log of Dirichlet density.
  p: Numpy array of shape (K,) that sums to 1.
  alpha: Numpy array of shape (K, ) with positive elements.
  """
  L = np.log(scipy.special.gamma(alpha.sum()))
  L -= np.log(scipy.special.gamma(alpha)).sum()
  L += np.sum((alpha - 1) * np.log(p))
  return L

尽管alpha中存在凹,但由于它涉及到两个凹函数np.log(gamma(alpha.sum()))np.log(gamma(alpha)).sum()的不同,所以它并不被表述为DCP。如果可能的话,我想把alpha的这个函数表述成遵循DCP规则集,这样就可以用cvxpy来进行alpha的最大似然估计。

这有可能吗?如果是的话,我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-11 12:18:34

正如您注意到的,np.log(gamma(alpha.sum()))-np.log(gamma(alpha)).sum()有不同的曲率,因此您需要将它们合并为

代码语言:javascript
复制
np.log(gamma(alpha.sum()) / gamma(alpha).sum())

有任何机会在DCP规则下为他们建模。上面的组合表达式可以被识别为多元贝塔函数的对数,而且由于多元β函数可以写成二元贝塔函数的乘积(请参阅这里),您可以将log积展开为一个和log表达式,其中每个项都是形式的。

代码语言:javascript
复制
np.log(beta(x,y))

这是DCP规则集中需要的凸原子。你们剩下的,要在实践中使用,就是把这个原子近似成cvxpy。np.log(gamma(x))近似这里将作为一个很好的起点。

有关更多细节,请参见math.stackexchange.com

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62251427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档