我想把Dirichlet密度的日志可能性写成一个关于Dirichlet分布alpha参数的约束凸规划 (DCP)优化问题。然而,日志的可能性
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的最大似然估计。
这有可能吗?如果是的话,我该怎么做?
发布于 2020-12-11 12:18:34
正如您注意到的,np.log(gamma(alpha.sum()))和-np.log(gamma(alpha)).sum()有不同的曲率,因此您需要将它们合并为
np.log(gamma(alpha.sum()) / gamma(alpha).sum())有任何机会在DCP规则下为他们建模。上面的组合表达式可以被识别为多元贝塔函数的对数,而且由于多元β函数可以写成二元贝塔函数的乘积(请参阅这里),您可以将log积展开为一个和log表达式,其中每个项都是形式的。
np.log(beta(x,y))这是DCP规则集中需要的凸原子。你们剩下的,要在实践中使用,就是把这个原子近似成cvxpy。np.log(gamma(x))近似这里将作为一个很好的起点。
有关更多细节,请参见math.stackexchange.com。
https://stackoverflow.com/questions/62251427
复制相似问题