概率编程与概率机器学习有什么区别?

我正在努力理解概率编程的概念,但读得越多,感觉越困惑。

我目前的理解是,概率编程类似于贝叶斯网络,只是将其翻译成编程语言,用于创建自动推理模型?

我有一些机器学习的背景,我记得一些机器学习模型也会输出概率,然后我又遇到了概率机器学习这个术语…

这两者之间有区别吗?还是它们是相似的?

非常感谢任何能帮助澄清的人。


回答:

我目前的理解是,概率编程类似于贝叶斯网络,只是将其翻译成编程语言,用于创建自动推理模型?

简而言之:这是正确的。概率程序可以被视为与贝叶斯网络等价,但使用的是一种更丰富的语言。作为一个领域,概率编程提出了这样的表示方法,以及利用这些表示的算法,因为有时更丰富的表示会使问题变得更简单

简而言之(续):还要注意的是,“概率机器学习”是一个比贝叶斯网络(图形模型)更广泛的概念。它指的是任何使用概率的机器学习方法。一些不是贝叶斯网络(图形模型)的概率机器学习的例子包括:概率分类器,如概率决策树或带有softmax最后一层的神经网络(输出类别概率),高斯过程(可以用图形模型来理解,但通常以专门的方式进行),贝叶斯神经网络(学习神经网络权重的分布而不是点值)。

无论如何,为了更多地了解概率编程与贝叶斯网络之间的关系,请继续阅读。

例如,考虑一个概率程序,它模型了一种更可能影响男性的疾病:

N = 1000000;for i = 1:N {    male[i] ~ Bernoulli(0.5);    disease[i] ~ if male[i] then Bernoulli(0.8) else Bernoulli(0.3)}

这个概率程序相当于以下贝叶斯网络及其相应的条件概率表:

贝叶斯网络等同于概率程序

对于像这样高度重复的网络,作者通常使用板表示法来使其描述更加简洁:

输入图像描述

然而,板表示法是一种供人类阅读的出版物设备,而不是像编程语言那样的正式语言。正式语言的优势在于它可以被算法自动处理,而不是仅被人类理解并手动操作,就像板表示法那样。此外,对于更复杂的模型,板表示法可能会变得难以理解和维护。最后,编程语言还带来了其他好处,例如原始操作,使得简洁地指定条件概率变得更加容易。

那么,这仅仅是拥有方便的表示方式的问题吗?不,因为更抽象的表示包含了可以用来提高推理性能的高层次信息。

假设我们想计算在N个人中患病人数的概率分布。一个直接且通用的贝叶斯网络算法将不得不考虑2^Ndisease变量分配的组合,以计算出答案。

然而,概率程序表示明确指出disease[i]male[i]的条件概率对于所有i都是相同的。推理算法可以利用这一点来计算disease[i]的边缘概率,这对于所有i都是相同的,使用disease[i]的数量将因此是一个二项分布B(N, P(disease[i])),并以此作为所需的答案,其时间复杂度在N上是常数的。它还能够提供一个对用户来说更易理解和有洞察力的解释

有人可能会争辩说,这种比较是不公平的,因为一个有知识的用户不会像定义的显式O(N)大小的贝叶斯网络那样提出查询,而是通过利用其简单的结构提前简化问题。然而,用户可能没有足够的知识进行这样的简化,特别是在更复杂的情况下,或者可能没有时间去做,或者可能会犯错误,或者可能事先不知道模型会是什么样,所以她无法像那样手动简化。概率编程提供了这种简化可以自动进行的可能性。

公平地说,目前大多数概率编程工具(如JAGS和Stan)执行这种更复杂的数学推理(通常称为提升概率推理),而是简单地对等同于概率程序的贝叶斯网络执行马尔可夫链蒙特卡洛(MCMC)采样(但通常不需要提前构建整个网络,这也是另一种可能的收益)。无论如何,这种便利已经足以证明它们的使用是合理的。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注