标准任务:有一些数据的表格表示
'''
x 1 2 3
y 1 1/2 2
'''
我尝试通过 Q1*x+Q0 行以及贝叶斯推理和 Scala 上的 Figaro 概率系统对其进行插值。
我的代码在哪里:
'''
class LineEx {
val universe = Universe.createNew()
val Q1: Uniform = Uniform(-10.0, 10.0)
val Q0: Uniform = Uniform(-10.0, 10.0)
val e1 = Normal(fx(Q1, Q0, 1.0), 0.5)
val e2 = Normal(fx(Q1, Q0, 2.0), 0.5)
val e3 = Normal(fx(Q1, Q0, 3.0), 0.5)
def fx(q1: Element[Double], q0: Element[Double], x: Double): Element[Double] = {
q1 * Constant(x) ++ q0
}
def resolve(): Array[Double] = {
e1.observe(1.0)
e2.observe(0.5)
e3.observe(2.0)
val likeliHood = e1 * e2 * e3
val priorDistribution = Q1 * Q0
val posteriorDistribution = likeliHood * priorDistribution
val mh = new OneTimeMetropolisHastings(universe, 100000, ProposalScheme.default, 10000, 1, posteriorDistribution, Q1, Q0)
mh.start()
val r = Array(mh.mean(Q1), mh.mean(Q0))
mh.stop()
mh.kill()
r
}
}
'''
但是这段代码总是返回 0, 0 有什么问题吗?
(我之前通过 LSM 解决的结果 -
'''
Q1=1/2
Q0=1/6
'''
)