我尝试使用高斯之前使用主持人并且似乎无法完全理解它。基本上我想替换
def lnprior(theta):
a, b, c = theta
if 1.0 < a < 2.0 and 1.0 < b < 2.0 and 1.0 < c < 2.0:
return 0.0
return -np.inf
有一些东西可以提供一个&#39; a&#39;来自具有mu和sigma的高斯分布。我该怎么办?喜欢这个?
def lnprior(theta):
a, b, c = theta
if 1.0 < b < 2.0 and 1.0 < c < 2.0:
return 0.0
if 0<a<20:
mu=10
sigma=1
s=np.random.normal(mu, sigma)
return s
return -np.inf
虽然看起来并不合适?
答案 0 :(得分:3)
以下方法似乎对我有用
CREATE TABLE Score (ID int IDENTITY(1,1),
Score int);
INSERT INTO Score
VALUES (65),(17),(97),(14),(34),(79),(37),(87),(65),(63),(15),(75),(05),(25),(38),(28),(88);
GO
CREATE TABLE ScoreRange (ID int IDENTITY(1,1),
[From] int, --Try to avoid keywords, and especially reserved words, for column names
[To] int); --Try to avoid keywords, and especially reserved words, for column names
INSERT INTO ScoreRange
VALUES (0,30),
(60,80);
GO
SELECT *
FROM Score S;
SELECT S.*
FROM Score S
JOIN ScoreRange SR ON S.Score BETWEEN SR.[From] AND SR.[To];
GO
DROP TABLE Score;
DROP TABLE ScoreRange;
答案 1 :(得分:1)
previous answer by isinwe是正确的答案,我只会尝试解释为什么是正确的。
在这个问题中,有一个统一先验的例子(真的类似于docs中的例子),如果theta
的值在某些约束内,则返回0,否则返回负无穷大。
这是正确的,因为此先验将用于计算后验概率:
然而,由于这个概率往往是非常小的数字,因此最好避免使用多个舍入错误来处理它们的对数,这意味着:
因此,统一的事先喜欢:
如果满足条件,则始终保持常量,否则为零。因为这里仅比例性是相关的,归一化常数可以忽略不计。因此,当采用对数时,当满足条件时,对数将为零,否则将为负无穷大。
在多个先验的情况下,它们相乘,一旦取对数就成了一个总和。也就是说,在如同示例的均匀先验的情况下,除非同时满足两个条件,否则先验的对数将为零, -inf + 0 = -inf 。
在更复杂的先验组合的情况下,我们需要回归对先验的正确解释,总和。因此,在当前的情况下,先验必须返回三个先验对数中的每一个的总和,这正是在isinwe's answer中以有效的方式完成的,即如果制服的贡献,则避免评估高斯先生已经 -inf 。
作为一般规则,如果条件未满足,最好首先检查均匀先验并返回 -inf ,如果满足条件,则评估所有其他更复杂的条件先验并返回它们的总和(因为均匀先验的贡献可以近似为零)。