《树莓派开发实战(第2版)》——导读

    xiaoxiao2024-04-18  9

    前言

    概率编程实战概率编程是一个激动人心的新领域,正在快速地引起人们的兴趣,从学术领域进入程序员的世界中。本质上,概率编程是创建概率推理模型的新方法,这种模型用来根据观测预测或者推理未知的事物。概率推理很久以来都是机器学习的核心方法之一,在机器学习中,使用了概率模型来描述从经验中得到的知识。在概率编程之前,概率推理系统局限于包含贝叶斯网络等简单、固定结构的模型。而概率编程提供了编程语言的全部能力以表现模型,使概率推理系统摆脱了这些桎梏。这正如从电路转向高级编程语言。

    我从青少年时代用BASIC语言开发一个足球模拟程序时就致力于概率编程,只是当时还没认识到。这个模拟程序使用“GOTO 1730 + RANDOM * 5”这样的指令表示随机的事件顺序。经过精心的调校,模拟程序已经很逼真,足以让我娱乐数个小时。当然,在随后的岁月中,概率编程已经逐渐成熟,不再只是包含随机目标的GOTO语句了。

    1997年,我和Daphne Koller、David McAllester合作编撰了第一篇关于概率编程的论文。这篇论文引入了一种类似Lisp的概率语言,但是主要的创新是根据关于输出的证据,推理程序可能特征的一种算法。这一创新不仅提供了运行程序以获得可能执行方式的手段,还反向论证和推理了产生观测结果的原因,从而使概率语言超越了典型的概率模拟语言。

    21世纪初,我开发了第一种基于函数式编程的通用概率编程系统IBAL。IBAL有很强的表达能力并包含新型推理算法,但是几年之后,我逐渐对其局限性感到不满,主要是难以与数据交互、与应用程序集成。这些局限性促使我在2009年开始开发新的概率编程系统,我将其定名为Figaro。Figaro以实用性作为首要目标,同时并没有牺牲概率编程能力。这导致了将Figaro作为Scala程序库的设计决策,该决策使得概率编程模型更容易与Java虚拟机应用集成。同时,Figaro具备了我所知的概率编程系统中最广泛的表现特征和推理算法。Figaro现在是一个开源GitHub项目,最新版本号为3.3。

    概率编程可能是一种难以掌握的技术,因为它需要多种技能,其中主要的是编写概率模型和编写程序的能力。对于许多程序员来说,编写程序很自然,但是概率建模有些神秘。本书的目的是揭开概率建模的神秘面纱,告诉您如何在创建概率模型时高效编程,帮助您有效地使用概率编程系统。本书假定读者在机器学习或者概率推理上没有任何背景。函数式编程和Scala的经验有所帮助,但是要使用本书并不一定要成为Scala的奇才,Scala专业知识也可能因为阅读本书而增长。

    阅读本书之后,您应该可以在没有机器学习博士学位的情况下,为许多应用程序设计概率模型,从数据中获得有意义的信息。如果您是某个领域的专家,本书能够帮助您表达脑海中或者纸面上的模型,使它们可以运算,实现对不同概率的计算和分析。如果您是一位数据科学家,本书可以帮助您开发比其他工具更丰富、更详细和更精确的模型。如果您是软件工程师或者架构师,正寻求在系统中加入不确定情形下的推理能力,本书不仅能够帮助您构建处理不确定性的模型,还能将这些模型集成到应用程序中。不管因为何种原因选择本书,我都希望您能够喜欢它,并从中得益。

    目录

    第1部分 概率编程和Figaro简介

    第1章 概率编程简介1.1 什么是概率编程1.2 为什么使用概率编程1.3 Figaro简介:一种概率编程语言1.4 小结1.5 练习

    第2章 Figaro快速教程2.1 Figaro简介2.2 创建模型和运行推理:重回Hello World2.3 使用基本构件:原子元素2.4 使用复合元素组合原子元素2.5 用Apply和Chain构建更复杂的模型2.6 使用条件和约束指定证据2.7 小结2.8 练习

    第3章 创建一个概率编程应用程序第2部分 编写概率程序第4章 概率模型和概率程序第5章 用贝叶斯和马尔科夫网络建立依赖性模型第6章 使用Scala和Figaro集合构建模型第7章 面向对象概率建模第8章 动态系统建模第3部分 推理第9章 概率推理三原则第10章 因子分解推理算法第11章 抽样算法第12章 处理其他推理任务第13章 动态推理和参数学习

    相关资源:树莓派开发实战
    最新回复(0)