数学与编程:“概率论”总结
终于写完概率论部分的内容。写一个总结,同时算是导读。这两天花了些时间,对原文进行修订。自己预期的目标,是将概率论的理论和编程结合起来。这里选择的编程工具是Python和一些第三方的包。我看过一些概率的书籍。有一些在数学上处理得好,但太偏重于纯粹数学;概率和编程结合的书,又过“实用”,没有把概率论的数学本质讲清楚。理论是最好的实用。为什么不能把简洁优美的数学理论和同样美妙的编程合在一起呢?有了这个疑问,也就有了这一系列文章的探索。
总的来说,概率论的体系是比较简单的。我觉得可以归纳为下面几个点:1. 公理体系,2. 典型分布,3. 描述量,4. 普适定律。在概率论的系列文章,或者是任何概率论的教材中,都会涉及这四个方面。
概率论的难点可能在于它的公理体系。它的叙述非常简单,但不容易把握。要知道,在概率论初期发展的一两百年里,公理体系并不存在。当时的概率论研究很碎片化。公理化体系是建立在现代数学的基础上,特别依赖于集合论和测度论的发展。因此它等到20世纪才建立起来。一些基本的概率论术语,如样本、实验、事件、随机变量,放在集合论的大环境里,就比较容易理解。公理化体系的难点在于概率测度的概念,也就是通俗说的“概率”。测度论本身为了探索“长度”、“面积”和“体积”这样一些代表集合“大小”而产生的数学学科。概率论是在事件集合上,增加一个称为“概率”的测度,对应起来。概率测度代表事件这样一个集合的“大小”。集合越大,越可能出现。我们随后引入的一些概念和工具,比如条件概率和连续分布,都是建立在概率测度的基础上的。所以,尽管测度论一般被认为是一门抽象学科,但一定程度的测度论知识非常有助于概率论的学习。
概率论的典型分布大多来源于古典研究,也就是出现在公理体系之前。这些典型分布大多基于一些具体的现实过程,比如连续打靶10次,中靶次数的分布。它们对应现实过程的一些经典事件的分布,因此非常实用。我们在研究许多概率论问题时,并不需要从最基本的公理从头开始,而更多的是根据问题的特性,来直接引用具体分布的结论。因此,这些经典分布就像一本“电磁学千题解”,我们需要掌握的,是问题所在的具体页码。这些经典分布最早都是为了解决概率论中的难题产生的。最经典和早期的一些数学分布来自于赌博这一现实活动。比如最早的概率论研究就来自于帕斯卡和费马的一系列通信,而这些通信都是为了解决帕斯卡的赌徒朋友所碰到的问题。数学的许多理论体系都来自于解题过程中产生的思想,比如高次多项式解这一数学难题,就孕育了抽象代数中的许多重要概念。如果没有了数学难题,比如千禧年七大问题,数学就丧失了它赖以生存的动能。
描述量有很强的实用意义。通过参照典型分布,我们已经可以大大简化工作量。但作为需要作出决定的普通人,我们往往只需要最重要的一些结果来参考。期望和方差就可以提供很重要、又很容易把握的分布信息。之前有一个报道,是美国一对老夫妇发现,某个彩票的设计上有问题。在一些特定的购买时期,买家的期望值是正值。他们于是根据期望来买彩票,结果不声不响的赚了几百万美元,还开公司教别人买彩票。下次打三国杀的时候,可以尝试考虑一下判定牌的期望。再比如说,作为股票买家,很容易分辨股价比较“震荡”和股价比较“平静”的时期,这就是方差的概念。在理论上,我们可以继续求其它的描述量,它们也有各自的具体意义,比如斜度。但无疑,期望和方差是生活中最常遇到,也最常处理的一些描述量。在矩概念上建立起的矩生成函数,是一种很常用的概率论理论研究工具。
最后,是一些普适定律,比如Chebyshev不等式和中心极限定律。这些定律不依赖于具体分布的类型,对所有分布都成立。这些定律就好象拿木棍做兵器,虽然糙了些,但胜在可以就地取材。但如果真的没有进一步信息,有一根木棍总胜过赤手空拳。这些定律可以参考它们的具体叙述。
概率论是许多学科的基础,比如我们后面要进入的统计。统计是对一大票人口的数据的研究。统计的“概率性”来自于,许多时候,由于收集信息的困难,我们无法获得所有人口的具体信息,我们需要通过采样来推断整个人口的信息。这样一种管中窥豹的研究方法,就具有很强的概率性。比如我们想了解程序员的比例,可以通过对500人采样来进行估计。尽管总人口中的程序员是确定的,但这500人的采样中,有多少个程序员,是一个概率事件。
概率论同样是随机过程的基础。随机过程的学习特别有助于理解一些具体分布的生成过程。此外,随机过程在计算机科学中也很重要,比如scheduler的线程,可以看作是随机的排队过程。我们可以通过对随机过程的了解,来优化scheduler。
程序员并不需要特别高深的数学,但数学可以是程序员武器库中一样有力的武器。在我觉得,抛开需要一定直觉和运气的数学研究,数学本身完全可以看作一个固定的、有确定规则的思维“编程”工具,它和程序员平常钻研的“操作系统”、“编程语言”,有很大的类似性:基于一定的规则,并沿着这样的规则,可以有一个确定的结果。计算机的一些领域是和数学紧密相关的,比如算法、函数式编程、计算机图形、数据挖掘、机器学习。许多编程书籍中“附赠”的数学节选,往往太过碎片化。看起来提供了所需要的数学,但将整个数学体系抛到脑后,只取结论。因为这个跳跃,让本身不是特别复杂的数学显得异常高深。其实,程序员这个异常好学的群体,为自己增加一个新的技能——数学,也是为自己打开许多计算机领域的门。
希望读过这一系列文章,可以“新技能get”。OK,下一步,统计。